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

时间:2009-01-09 13:57:54

标签: windows winapi installer icons wise

我有一个使用Wise安装程序安装的应用程序(编辑:Wise创建一个Setup.exe文件,而不是MSI)。安装后,会为某种文件类型设置一个图标:

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

然而,在安装之后,资源管理器选择使用通用的“白板+应用程序图标”图标显示此图标,该图标不同(我不提供)。

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

这是我到目前为止所尝试的

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

这些都不起作用。获得正确图标的唯一方法是让程序自己安装它。我在注册表中找不到任何更改。我脱掉了头发。

我想避免什么

  • 使用其他安装程序软件进行测试
  • 过多地更改安装脚本(我没有Wise本身,因为安装程序会根据需要在另一台机器上构建)。
  • 将图标嵌入可执行文件中。

有关如何让Explorer在安装后显示正确图标的任何建议吗?

2 个答案:

答案 0 :(得分:1)

有几件事情浮现在脑海中:

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

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

  1. 在“功能详细信息”页面组下,选择“文件关联”页面。
  2. 从“当前功能”下拉列表中,选择“核心”。
  3. 单击窗口右侧的“添加”,然后选择“新建”。 将出现“文件关联详细信息”对话框。
  4. 单击“扩展详细信息”选项卡。
  5. 浏览到QuickFacts目录,选择文件QckFacts.exe,然后单击OK。
  6. 在扩展程序中,输入:qft
  7. 保留其余字段的默认值,然后单击“确定”。 扩展名.QFT已添加到安装中。当最终用户双击a时 在目标计算机上使用此扩展名的文件QuickFacts应用程序 发射。
  8. 保存安装
  9. [编辑] 您可能还缺少必需的注册表项(图标可能不足以让shell显示它):

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

答案 1 :(得分:1)

这是解决方案。

每种文件类型(在本例中为“.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”类型的所有文件创建一个图标(即我提到的“白板+应用程序图标”图标)。

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

的值
HKEY_CLASSES_ROOT\.auz\(default)

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

所以我只需完全删除HKEY_CLASSES_ROOT\Foobar Document键,然后voilà就解决了这个问题!