在Windows上首次启动后,文档图标发生更改

我有一个应用程序与安装Wise安装程序(编辑:聪明创build一个Setup.exe文件,而不是MSI)。 安装时,为某种文件types设置一个图标

HKEY_CLASSES_ROOT\.auz\DefaultIcon = C:\Path\To\App\some_icon.ico,0 

然而,安装后,资源pipe理器select显示这个图标使用通用的“白皮书+应用程序图标”图标,这是不同的(并不是我提供)。

首次启动时,应用程序本身会注册图标和其他文件关联,以便上次运行的版本“拥有”这些文件。 此时, 资源pipe理器将更改此文件types的图标并显示正确的图标 ,但是当我查看registry时, DefaultIcon的值完全相同

这是我迄今为止所尝试的

  • 从registry中删除所有条目,并自己写。
  • 安装后,“触摸”DefaultIcon的值,然后启动一个只调用SHChangeNotify(SHCNE_ASSOCCHANGED) (我的程序在更新registry中的文件关联后执行此操作)的小程序。
  • 安装完成后,查杀并重新启动资源pipe理器。
  • 安装完成后,使用TweakUI“修复”桌面上的图标。

这些都没有工作。 获得正确图标的唯一方法是让程序自己安装它。 我无法在registry中find任何更改。 我正在拉我的头发。

我想避免

  • 使用另一个安装软件进行testing
  • 更改安装脚本太多了(我没有Wise本身,因为安装程序是根据需要在另一台机器上构build的)。
  • 将图标embedded到可执行文件中。

有关如何让资源pipe理器安装后显示正确的图标的任何build议?

想到几件事情:

  • 你为什么在注册表中的图标后有',0'? 这会将显示的图标限制为一个图标。 更好的是有一个图标文件,其中包含几个图标(相同的图标用户界面,但不同的大小/颜色深度) – 资源管理器有不同的图标视图! 如果您的图标文件只有一个图标,请尝试删除“,0”。
  • 在资源管理器收到更新通知后,可能是注册表最后写在安装程序中了?
  • 确保在图标文件存储在磁盘上之后写入注册表项
  • 您应该使用Wise安装程序自己的配置来注册文件类型。 不知道,但我认为资源管理器将不会采取任何变化,直到一个msi的整个安装完成,所以手动调用SHChangeNotify()不会帮助。 msi有自己的表格,如果你使用正确的配置,Wise会添加它。

对于Wise,请执行以下操作(而不是自行创建注册表项):

  1. 在“功能详细信息”页面组下,选择“文件关联”页面。
  2. 从“当前要素”下拉列表中选择“核心”。
  3. 点击窗口右侧的添加,然后选择新建。 出现文件关联详细信息对话框。
  4. 单击扩展详细信息选项卡。
  5. 浏览到QuickFacts目录,选择文件QckFacts.exe,然后单击确定。
  6. 在分机中输入:qft
  7. 保留其余字段的默认值,然后单击确定。 扩展名.QFT被添加到安装中。 当最终用户在目标计算机上双击带有该扩展名的文件时,QuickFacts应用程序将启动。
  8. 保存安装

[编辑]你也可能缺少必需的注册表项(该图标可能不足以让shell显示):

 HKEY_CLASSES_ROOT\.auz\(default) = auzfile HKEY_CLASSES_ROOT\.auz\shell\open\command = C:\Path\To\App.exe 

这是解决方案。

每个文件类型(在这种情况下,我们说“.auz”)已经注册了:

  • 带有图标资源路径的DefaultIcon
  • HKEY_CLASSES_ROOT\.auz\(default)值的值,给出文件类型的描述,例如“Foobar文档”。

除此之外,还有一个“Foobar Document”文档类型的条目,或者更具体地说,是一个关于如何从shell中打开这些文档的键:

 HKEY_CLASSES_ROOT\Foobar Document\Shell\command\open\(default) = C:\Path\To\App.exe "%1" 

显然, 这个键取代为特定文件扩展名写的值 。 因为图标是.exe文件的外部,所以Windows资源管理器使用应用程序的第一个图标为所有类型为“Foobar Document”的文件(即我提到的“white sheet + application icon”图标)创建了一个图标。

现在,我错了,应用程序本身确实改变了价值

 HKEY_CLASSES_ROOT\.auz\(default) 

在开始时略有不同的值,比如说“Foobar 1.2 Document”(不是DRY的问题)。 因此,链接到“Foobar文件”丢失,并且.auz文件在第一次启动后得到了它们的图标。

所以我通过简单地删除HKEY_CLASSES_ROOT\Foobar Document键完全解决了这个问题,并声音