我们最近已将 Advertised 属性删除到我们的安装中,因为安装后所有图标都是标准图标(通用/空白)。现在我们使用这种代码:
<DirectoryRef Id="MyAppShortcutFolder">
<Component Id="MyAppShortcuts" DiskId="1" Guid="MyGuid">
<CreateFolder />
<RegistryKey Action="createAndRemoveOnUninstall" Root="HKCU" Key="$(var.MyAppRegKey)\Shortcuts">
<RegistryValue Name="ClientShortcuts" Value="yes" Type="string" KeyPath="yes" />
</RegistryKey>
<Shortcut Id="MyAppShortcut" Directory="MyAppShortcutFolder"
Name="!(loc.ShortcutMyAppName)"
WorkingDirectory="MYAPPINSTALLDIR"
Target="[MYAPPINSTALLDIR]MyApp.exe"
Arguments='xxx"'
Icon="ARPPRODUCTICON.exe" />
<RemoveFolder Id='RmdirClientShortcutFolder' Directory='MyAppShortcutFolder' On='uninstall' />
</Component>
...
<Icon Id="ARPPRODUCTICON.exe" SourceFile="$(var.MyAppBasePath)\ICO\MyAppShortcut.ico" />
这会生成一个快捷方式,指向安装在“%systemroot%/A-GUID-Here/ARPPRODUCTICON.exe”之类的某个位置的图标。只要快捷方式未复制到桌面,这项工作就可以正常工作。如果用户这样做(实际上很常见)然后安装了我们软件的新版本(可能是“主要”更新),则旧的快捷方式图标将被卸载,并为新的快捷方式图标创建一个新的 GUID。这会使(旧)桌面快捷方式失去其图标。
我们真正想要的是从 MyApp.exe 的内置资源中指出图标。如果这是不可能的,我们希望快捷方式图标引用一个永久位置,以便旧快捷方式在升级后仍然有效。我们在安装中可能有 10 个快捷方式。如果需要,我们可以创建一个特殊的资源 DLL/EXE 来存储 ICON 资源。但是我们如何简短地指出一个“本地”安装的文件而不是 %systemroot%?
我们使用 Wix 3.5。我们必须支持 Windows XP/2003。
问候阿尔杜斯