WIX创建的快捷方式图标会将exe文件添加两次

3

我正在尝试在我的Visual Studio中使用的wix 3.8中,基于exe文件添加图标到快捷方式:

  <Component Id="my.exe" Guid="MY-GUID">
    <File Id="my.exe" Source="$(var.Project.TargetPath)" KeyPath="yes">
      <Shortcut Id="MyShortcut" Directory="ApplicationMenuFolder" Name="My App" WorkingDirectory="ApplicationRootFolder" Icon="my.exe" IconIndex="0"  Advertise="yes">
        <Icon Id="my.exe"  SourceFile="$(var.Project.TargetPath)" />
      </Shortcut>
    </File>
  </Component>

问题在于文件$(var.Project.TargetPath)在MSI中被添加了两次。如果我删除图标引用,就可以证明这一点。如果我删除,MSI的大小比带有图标引用的版本要小3MB。

我该如何设置快捷方式图标到exe上,同时又不会将其重复添加到MSI中呢?

4个回答

4
您正在将exe文件用作图标文件:
<Icon Id="my.exe"  SourceFile="$(var.Project.TargetPath)" />

如果您想使用较小的文件,例如.ico文件,请更改Icon / @ SourceFile以引用它。但是,是的,您仍然需要@Id,以使“快捷方式指向的文件与其具有相同的扩展名”(.exe)。


谢谢指出,只有 Id 需要扩展名! - tiands

3

我不确定(在安装程序参考资料中找不到确定的信息),但我认为广告快捷方式不能使用存储在exe文件中的图标。该图标需要流式传输到图标表中,并且缓存在安装程序高速缓存中。如果你想节省3MB,你需要使其成为非广告的,或者从exe文件中删除图标并将其单独存储在图标表中。


2
这是当前 WiX 的行为。我已经提交了一个功能请求来改进这个问题。如果您想要更改,请随时留下评论。否则,我怀疑 Rob 会说这是按设计运行的。
作为一种解决方法,从您的 EXE 中提取图标,然后在 Icon 元素中使用它。

好的,我会给那个请求添加注释。 - Marcin

0
当您添加该图标时,您只是添加一个进入MSI文件的图标表中的图标。这与快捷方式定义没有任何关系。因此,我不确定您要解决什么问题,尽管我可以理解为什么会导致更大的MSI文件。您是说快捷方式丢失了,或者图标错误或其他问题吗?


我只想避免在msi中重复添加相同的文件(在这种情况下是exe)。这就是我理解的智能压缩 - 避免将相同的文件两次添加到msi中。 - Marcin
智能打包只规范放置到cab文件中的文件。它不查看其他博客存储位置,如二进制表或图标表。尽管如此,似乎将资源从源路径提取出来并仅将资源放置在表中而不是整个EXE是WiX的功能请求/错误。但是,Windows安装程序图标表确实说Icon可以是PE(EXE / DLL)格式。 - Christopher Painter
谢谢您的解释,我是从旧版VS安装程序转到WiX的新手。在那里它就可以工作了...我已经提取了图标并将其单独放置。 - Marcin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接