为什么Icon元素要求Id属性以'.exe'或'.ico'结尾

时间:2012-11-30 12:04:28

标签: wix icons windows-installer

为什么Shortcut元素的Icon应该具有以'.ico'或'.exe'结尾的Id属性?

所以这段代码

<Icon Id="ProgramIcon" SourceFile="Images\MyAppIcon.ico"/>

<Component Guid="MY_GUID" Id="MyAppComponent">
    <File Source="MyApp.exe" Name="MyApp.exe" Id="MyApp.exe">
        <Shortcut Id="MyApp.Shortcut" Directory="ApplicationProgramMenuDir" WorkingDirectory="INSTALLDIR" Name="MyApp" Icon="ProgramIcon" Advertise="yes" />
    </File>
</Component>

生成编译错误:

error LGHT0204: ICE50: The extension of Icon 'ProgramIcon' for Shortcut 'MyApp.Shortcut' does not match the extension of the Key File for component 'MyAppComponent'. [D:\APPS\MyProject.wixproj]

但是这段代码

<Icon Id="ProgramIcon.ico" SourceFile="Images\MyAppIcon.ico"/>

<Component Guid="MY_GUID" Id="MyAppComponent">
    <File Source="MyApp.exe" Name="MyApp.exe" Id="MyApp.exe">
        <Shortcut Id="MyApp.Shortcut" Directory="ApplicationProgramMenuDir" WorkingDirectory="INSTALLDIR" Name="MyApp" Icon="ProgramIcon.ico" Advertise="yes" />
    </File>
</Component>

编译好。

这是我第一次看到任何元素的Id属性的这种限制,它看起来很奇怪。我认为这甚至没有任何理由成为警告。所以我不明白这个功能的一些基础知识。请帮助我理解所描述行为的原因。

2 个答案:

答案 0 :(得分:5)

看起来是因为:http://msdn.microsoft.com/en-us/library/aa369210.aspx(参见备注部分)。

我猜它验证失败,因为Icon="ProgramIcon"与快捷方式的扩展名不匹配。

http://wix.sourceforge.net/manual-wix2/wix_xsd_shortcut.htm

  

Icon元素的标识符引用。图标标识符应与其指向的文件具有相同的扩展名。例如,可执行文件的快捷方式(例如“my.exe”)应引用标识符为“MyIcon.exe”的图标

答案 1 :(得分:0)

我想我可以对此有所了解。

这可能与id最终成为包含图标的文件的名称有关。如果猜测它使用文件扩展名来确定使用哪个解析器,那将会产生猜测。

我是如何偶然发现的?

看似无关,我正在调查Windows事件日志中充满源自我们应用程序的SxS错误的问题。但路径是错的:

C:\Windows\Installer\{Guid}\ProductIcon.exe

顺便说一下,ProductIcon.exe这是我们使用的图标ID。

经过仔细检查,我发现此文件是我们产品的可执行文件的副本。我们得到SxS错误的原因是它只复制可执行文件而没有复制引用的dll-s。