1

我们最近已将 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。

问候阿尔杜斯

4

2 回答 2

1

ico 文件的永久位置不会解决另一个问题,即用户复制到桌面的快捷方式仍将指向错误的 EXE 文件。

我过去使用的一种方法来维护一个稳定的程序快捷方式到一个移动或更改名称的文件是在您的主应用程序文件夹下创建一个非常小的存根 EXE 以供快捷方式指向。运行时,存根使用运行时逻辑来查找真正的 EXE,然后将其脱壳。例如,在您的情况下,您可能会使用 GUID 编写注册表项,以便存根知道在哪里可以找到 EXE。如果您的其他 EXE 很大或加载/初始化缓慢,那么您可以在存根中添加启动画面,同时为用户获得更快的 UI 响应体验。

于 2014-10-20T18:26:20.467 回答
0

如果您指定元素的Icon属性,Shortcut则使用在目标 exe 文件中找到的第一个图标创建快捷方式。

我在 Windows 10 上并使用带有快捷方式的 WiX 3.10,advertised="yes"但我通过以下方式禁用广告:

<Property Id="DISABLEADVTSHORTCUTS" Value="1" />

另请参阅答案。

于 2017-04-13T09:06:43.317 回答