【问题标题】:Application icon doesn't show in control panel 'Add/Remove Programs'应用程序图标未显示在控制面板“添加/删除程序”中
【发布时间】:2010-06-21 13:44:48
【问题描述】:

我有一个通过ClickOnce 部署的.NET 应用程序。应用程序图标在开始菜单、任务栏等上显示正常,但在控制面板的添加/删除程序中却没有。我需要做什么来解决这个问题?

【问题讨论】:

    标签: .net clickonce icons


    【解决方案1】:

    ClickOnce 不支持此功能(尽管我一直要求这样做)。

    我很久以前就收集了以下代码,但我从来没有时间尝试过。我会在它周围放一个try/catch,以防它引起问题。让我知道它是否有效。 ;-)

    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 , true);
        object myValue = myKey.GetValue("DisplayName");
        if (myValue != null && (string)myValue == _ApplicationName)
        {
            myKey.SetValue("DisplayIcon", _ExecutablePath + @"\App.ico");
            break;
        }
    }
    

    【讨论】:

    • 这显然需要您提供完全信任或注册权限。这是大多数人所做的(我的意思是完全信任),但如果您确实关心在较低信任下运行,仍然是一个好点。
    • 我认为它可能在部分信任的情况下工作,因为它正在编辑注册表的 HKCU 部分,并且 ClickOnce 应用程序应该可以访问它。
    • 你会把这段代码放在哪里 - 在应用程序启动代码或一些 exe 安装后(如何)?
    • 我会把它放在应用程序启动代码中。检查 ApplicationDeployment.IsNetworkDeployed,如果是这样,试试这个:ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; if (ad.IsFirstRun) setupicon();这样,它只会在用户安装应用程序或获取更新时运行。当然,如果您只在第一次就可以弄清楚如何做,那是理想的。 (我可以这样做,因为我们创建了一个缓存,如果没有缓存,这是用户第一次运行应用程序。)
    • 这很好用,虽然它似乎是获取卸载图标的一种迂回方式。希望它会在 Click Once 技术的某些更高版本中得到解决。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2018-10-17
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多