【问题标题】:How do I create an Icon for my non-advertised application in Windows using WiX?如何使用 WiX 在 Windows 中为我的非广告应用程序创建图标?
【发布时间】:2014-12-08 04:31:41
【问题描述】:

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

问候阿尔杜斯

【问题讨论】:

  • 也许需要解释一个选项:如果我想将我的 ICO 文件安装在与我的应用程序相同的目录中。如何引用该 ICO 文件,而不是作为快捷方式图标放入 %systemroot%/GUID 中的内容?
  • 使用在升级/重新安装时不会更改的 GUID 来修复图标的安装位置也是可以接受的。这可能吗?怎么样?

标签: windows wix desktop-shortcut


【解决方案1】:

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

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

【讨论】:

  • 通常我们的用户安装到一个固定的位置,这个位置永远不会改变,EXE 名称也是一样的。在用户更改安装目录的极少数情况下丢失桌面快捷方式是可以接受的。但对我来说,问题是图标表中的图标总是在每次安装时出现在随机 GUID 位置。这使得用户制作的快捷方式每次升级都会丢失其图标(通常每年 4 次),但不会丢失其功能。如果图标文件在升级后会保留其 GUID,这也是可以接受的解决方案。
【解决方案2】:

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

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

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

另请参阅this 答案。

【讨论】:

  • 看起来很有趣。我将不得不测试这种方法。
猜你喜欢
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多