如何使用WiX在Windows中为我的非广告应用程序创建图标?

时间:2014-10-13 14:53:16

标签: windows wix desktop-shortcut

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

这会产生一个快捷方式,指向安装在某个地方的图标,例如&#34;%systemroot%/ A-GUID-Here / ARPPRODUCTICON.exe&#34;。只要未将快捷方式复制到桌面,此工作就可以正常工作。如果用户执行此操作(实际上非​​常常见),然后安装新版本的软件(可能是&#34;主要&#34;更新),则会卸载旧的快捷方式图标,并为新的快捷方式图标创建新的GUID 。这使(旧)桌面快捷方式丢失其图标。

我们真正想要的是从MyApp.exe的内置资源中指出图标。如果这不可能,我们希望快捷方式图标引用永久位置,以便旧的快捷方式在升级后仍然有效。 我们在安装中可能有10个快捷方式。我们可以创建一个特殊的资源DLL / EXE,以便在必要时存储ICON资源。但是我们如何在本地&#34;安装文件而不是%systemroot%?

我们使用Wix 3.5。我们必须支持Windows XP / 2003。

关心奥尔杜斯

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

另见this回答。