7

为什么快捷方式元素的图标应该具有以“.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 属性的这种限制,它看起来很奇怪。我认为这甚至是警告都没有任何理由。所以我不了解此功能的一些基础知识。请帮助我了解所描述行为的原因。

4

2 回答 2

6

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

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

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

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

于 2012-11-30T12:19:30.263 回答
0

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

这可能与 id 最终成为包含图标的文件的名称有关。它会冒险猜测它使用文件扩展名来确定要使用的解析器。

我是怎么偶然发现的?

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

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

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

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

于 2017-11-15T12:27:39.693 回答