C# Visual Studio-应用程序图标-PowerPoint加载项

C# Visual Studio-应用程序图标-PowerPoint加载项,c#,.net,visual-studio,vsto,C#,.net,Visual Studio,Vsto,我已经使用Visual Studion 2012编写了一个PowerPoint加载项 我以前从未这样做过,并从File/New/powerpoint2010 addin开始了这个项目 这创建了一个“类库”项目 所以我写了我的addin,它工作得很好。快乐的日子 但是,当应用程序安装在计算机上时,控制面板/已安装软件中的图标是默认图标 通常,我希望能够进入项目属性/应用程序并选择我想要使用的图标,但我唯一的选择是选择一个资源文件 我已将.ico文件添加到我的资源中,但似乎无法确定如何使其成为项目的

我已经使用Visual Studion 2012编写了一个PowerPoint加载项

我以前从未这样做过,并从File/New/powerpoint2010 addin开始了这个项目

这创建了一个“类库”项目

所以我写了我的addin,它工作得很好。快乐的日子

但是,当应用程序安装在计算机上时,控制面板/已安装软件中的图标是默认图标

通常,我希望能够进入项目属性/应用程序并选择我想要使用的图标,但我唯一的选择是选择一个资源文件

我已将.ico文件添加到我的资源中,但似乎无法确定如何使其成为项目的图标

有人能帮忙吗

抱歉,忘了说,这是使用“ClickOnce”分发系统安装的。我已经查看了“发布”属性选项卡,其中也没有定义应用程序图标的内容

谢谢


特雷弗

从这条线索上看,这似乎是不可能的

由于它是一个.dll,操作系统决定分配给它的图标

特雷夫


好的,既然我知道ClickOnce涉及到了这一点,我想您可以找到这段代码。 它必须在应用程序启动时运行。 代码直接编辑注册表,因此在某些Windows版本中可能会有所不同

/// <summary>
/// change the icon in add/remove programs     
/// </summary>
private static void SetProgramInstallIcon()
{
  //run only when deployed 
  if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
     && ApplicationDeployment.CurrentDeployment.IsFirstRun)
  {
    try
    {
      string iconSourcePath = Path.Combine(System.Windows.Forms.Application.StartupPath, "YourFancyIcon.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() == "YourApplicationDisplayName")
        {
          myKey.SetValue("DisplayIcon", iconSourcePath);
          break;
        }
      }
    }
    catch (Exception ex) {
      //manage errors as you like (log, UI, ...)
    }
  }
}
//
///更改“添加/删除程序”中的图标
/// 
私有静态void SetProgramInstallIcon()
{
//仅在部署时运行
如果(System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed
&&ApplicationDeployment.CurrentDeployment.IsFirstRun)
{
尝试
{
字符串iconSourcePath=Path.Combine(System.Windows.Forms.Application.StartupPath,“yourfankyicon.ico”);
如果(!File.Exists(iconSourcePath))
返回;
RegistryKey myUninstallKey=Registry.CurrentUser.OpenSubKey(@“Software\Microsoft\Windows\CurrentVersion\Uninstall”);
字符串[]mySubKeyNames=myUninstallKey.GetSubKeyNames();
for(int i=0;i
可能这就是您要找的:谢谢,但这不是我要找的。我认为线程所指的是文件图标,而不是控制面板/已安装软件菜单中的图标。这看起来确实是一个可能的解决方案,但我对实现它持谨慎态度,因为您提到的注册表差异?谢谢