Вопрос по wix, clickonce, mage – Пользовательский значок для приложения ClickOnce в «Установка и удаление программ»

14

Приложение ClickOnce, созданное с использованиеммаг не отображается значок, указанный в параметре командной строки Mage на панели управленияAdd or Remove Programs.

Я читаю некоторые блоги, например:

Application icon is not displayed in Add/Remove Programs dialog

Missing Icon in Add/Remove Programs for ClickOnce Application

Как я могу добиться этого без редактирования ключей реестра? Является ли это возможным?

Связанные с:Icon for ClickOnce application in 'Add or Remove Programs' Peter Mortensen

Ваш Ответ

1   ответ
17

но вы можете сделать это программно. Вы должны быть уверены, что значок включен в развертывание. Мы устанавливаем описание нашей сборки в той же строке, что и имя нашего продукта, поэтому мы можем просмотреть строки удаления для нужного приложения, выполнив поиск описания сборки. Таким образом, нам не нужно жестко кодировать название продукта в этом коде.

        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
            }
        }
    }
Откуда ты это делаешь?

Похожие вопросы