Systemsteuerung.Software: Anwendung hat kein Icon

08/01/2010 - 20:25 von Alberto Luca | Report spam
Hallo NewsGroup,

ich habe eine Windows-Application, welche ich mittels ClickOnce
veröffentliche.
Die Software ist unter Systemsteuerung.Software aufgelistet, jedoch mit dem
normalen Standard-Icon.
Meine Anwendung hat jedoch ein individuelles Icon.

Woran kann's liegen, dass unter Systemsteuerung.Software diese Icon nicht
angezeigt wird?

Besten Dank vorab!
Ciao, Alberto
 

Lesen sie die antworten

#1 Frank Dzaebel
08/01/2010 - 21:34 | Warnen spam
Hallo Alberto,

ClickOnce ... Meine Anwendung hat jedoch ein individuelles Icon.
Woran kann's liegen, dass unter Systemsteuerung.Software diese Icon
nicht angezeigt wird?



Weil hier by Design immer das Standard-ClickOnce Icon angezeigt wird.
Es soll hier laut Microsoft keinen Weg in VS 2008 und auch nicht in
VS 2010 geben (wenn ich das richtig verstehe) :

[Default Icon of ClickOnce setup]
http://social.msdn.microsoft.com/Fo...453c305309
___________

Ggf. ist aber folgender Workaround für Dich eine Möglichkeit.
Rufe zum Beispiel: ClickOnceIconAktualisieren() am Anfang der App auf:

/// <summary>
/// Ersetzt das Icon zur Deinstallation in der
/// Systemsteuerung mit dem Applikations-Icon
/// </summary>
static void ClickOnceIconAktualisieren()
{
const string displayIcon = "DisplayIcon";
try
{
if (ApplicationDeployment.IsNetworkDeployed &&
ApplicationDeployment.CurrentDeployment != null &&
ApplicationDeployment.CurrentDeployment.IsFirstRun)
{
string pkToken = PublicKeyToken();
using (RegistryKey keyToken = ProgrammRegistrierungsGruppe(pkToken))
{
string pfadIcon = string.Format("{0},0", Assembly.
GetExecutingAssembly().Location);
if (pfadIcon != keyToken.GetValue(displayIcon) as string)
keyToken.SetValue(displayIcon, pfadIcon);
}
}
}
catch (Exception exp)
{
Trace.Write("Das Icon kann nicht " +
"aktualisiert werden: " + exp.Message);
}
}

private static string PublicKeyToken()
{
ApplicationSecurityInfo asi = new ApplicationSecurityInfo(
AppDomain.CurrentDomain.ActivationContext);
byte[] keyTokenBytes = asi.ApplicationId.PublicKeyToken;
StringBuilder keyToken = new StringBuilder();
for (int i = 0; i < keyTokenBytes.GetLength(0); i++)
keyToken.Append(string.Format("{0:x}", keyTokenBytes[i]));
return keyToken.ToString();
}

private static RegistryKey ProgrammRegistrierungsGruppe(
string PublicKeyToken)
{
const string uninstall = "UninstallString";
string suchKeyToken = "PublicKeyToken=" + PublicKeyToken;
using (RegistryKey schlüssel = Registry.CurrentUser.
OpenSubKey("Software\\Microsoft\\Windows\\" +
"CurrentVersion\\Uninstall", false))
{
if (schlüssel != null)
{
string[] subKeyNamen = schlüssel.GetSubKeyNames();

foreach (string subKeyName in subKeyNamen)
{
RegistryKey appSchlüssel = schlüssel.OpenSubKey(subKeyName, true);
if (appSchlüssel != null)
{
string key = (string)appSchlüssel.GetValue(uninstall);
if (key.Contains(suchKeyToken)) return appSchlüssel;
appSchlüssel.Close();
}
}
}
throw new ApplicationException("Applikation nicht gefunden");
}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen