1

clickonce 从哪里获取DisplayName寄存器中使用的值HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XXXXXXXX?我尝试在 VS(项目-> 属性-> 应用程序-> 程序集信息)上更改应用程序标题和程序集名称,但这并没有改变那里使用的名称DisplayName

我需要这个,因为我想避免在这段代码上硬编码我的应用程序名称,这会在添加/删除程序时更改我的应用程序的卸载图标

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() == applictionName) /* this must be the same used by clickonce to set DisplayName value  */
    {
        myKey.SetValue("DisplayIcon", iconSourcePath);
        break;
    }
}
4

2 回答 2

1

从哪里clickonce从regedit获取DisplayName中使用的值?

若要设置ClickOnce应用程序的显示名称,请在发布之前在 Visual Studio 内的“发布选项”中指定它。这将更新 ClickOnce Manifest - 有关 ClickOnce 应用程序的信息。此信息更为重要,并且基本上会否决您在Assembly Information中指定的任何细节。

<项目>。属性.发布.选项

在此处输入图像描述

此外,对于 ClickOnce 应用程序,无需在Windows 注册表中进行处理。这样做可能会阻止自动更新。

于 2015-11-06T21:39:49.057 回答
1
object myValue = myKey.GetValue("UrlUpdateInfo");
if(myValue != null)
{
    string updateinfo = myValue.ToString();
    string updateLocation = ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
    if (updateinfo==updateLocation)
    {
        myKey.SetValue("DisplayIcon", iconSourcePath);
        break;
    }
}
于 2015-11-08T18:34:54.817 回答