使用创建的ClickOnce应用程序法师没有显示被指定为在控制面板添加或删除程序法师命令行参数的图标。
我读了一些博客,比如:
在添加不显示应用程序图标/删除程序对话框
缺少的图标在添加/删除程序的ClickOnce应用程序
我怎样才能做到这一点,而无需编辑注册表项? 可能吗?
使用创建的ClickOnce应用程序法师没有显示被指定为在控制面板添加或删除程序法师命令行参数的图标。
我读了一些博客,比如:
在添加不显示应用程序图标/删除程序对话框
缺少的图标在添加/删除程序的ClickOnce应用程序
我怎样才能做到这一点,而无需编辑注册表项? 可能吗?
有没有办法做到这一点,而不编辑注册表,但你可以通过编程方式做到这一点。 你必须要保证图标包含在部署。 我们建立我们的组件描述相同的字符串作为我们产品的名称,所以我们可以通过搜索组件描述看穿了正确的应用程序卸载字符串。 通过这种方式,我们不必在此代码硬编码的产品名称。
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
}
}
}