Ícone personalizado para o aplicativo ClickOnce em ‘Adicionar ou remover programas’

Um aplicativo ClickOnce criado usando Mage não está mostrando o ícone que foi especificado para o parâmetro da linha de comando Mage no painel de controle Adicionar ou Remover Programas .

Eu leio alguns blogs, como:

Como posso conseguir isso sem editar as chaves do registro? É possível?

Não há como fazer isso sem editar o registro, mas você pode fazê-lo por meio de programação. Você precisa ter certeza de que o ícone está incluído na implantação. Nós definimos nossa descrição de assembly para a mesma string que o nosso nome de produto, para que possamos examinar as strings de desinstalação do aplicativo correto, procurando a descrição da assembly. Dessa forma, não precisamos codificar o nome do produto nesse código.

private static void SetAddRemoveProgramsIcon() { //only run if deployed if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed && ApplicationDeployment.CurrentDeployment.IsFirstRun) { try { Assembly code = Assembly.GetExecutingAssembly(); AssemblyDescriptionAttribute asdescription = (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(code, typeof(AssemblyDescriptionAttribute)); string assemblyDescription = asdescription.Description; //the icon is included in this program string iconSourcePath = Path.Combine(System.Windows.Forms.Application.StartupPath, "youriconfile.ico"); if (!File.Exists(iconSourcePath)) return; RegistryKey myUninstallKey = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall"); string[] mySubKeyNames = myUninstallKey.GetSubKeyNames(); for (int i = 0; i < mySubKeyNames.Length; i++) { RegistryKey myKey = myUninstallKey.OpenSubKey(mySubKeyNames[i], true); object myValue = myKey.GetValue("DisplayName"); if (myValue != null && myValue.ToString() == assemblyDescription) { myKey.SetValue("DisplayIcon", iconSourcePath); break; } } } catch (Exception ex) { //log an error } } } 
    Intereting Posts