Wix:如何将 `C:\Windows\hh.exe` 指向我的 CHM 文件快捷方式的图标源?

Wix: How can I point `C:\Windows\hh.exe` as the source of the icon for my CHM-file shortcut?

我需要创建我的 CHM 文件的快捷方式。它的图标将从 C:\Windows\hh.exe 文件中获取。 Icon 属性需要一个 Id 组件,但 hh.exe 在我的 MSI 中不存在,因为它始终存在于 C:\Windows\ 目录中。因此它不会工作:

<Component Id="Help_default" Guid="{BE58A822-637E-4B58-B2AC-690BA9FDF833}">
  <File Name="ProxyTools.chm" KeyPath="yes">
    <Shortcut Id="ProxyTools.exe" Directory="ProgramMenuDir" 
              Name="ProxyTools (English)" 
              WorkingDirectory='INSTALLDIR' Advertise="yes" Icon="hh.exe" IconIndex="0"/>
  </File>
</Component>

也许我要以某种方式指出 hh.exe 就像

的项目
<Directory Id="WindowsFolder"/>

如何将 C:\Windows\hh.exe 指向我的 CHM 文件快捷方式的图标来源?

UPD

我将 hh.exe 添加到我的 WiX 项目中并添加了这个:

<Icon Id="hh.exe" SourceFile="hh.exe"/>

现在快捷方式是正确的。

Windows 安装程序无法做到这一点。要了解确切的功能集,您必须检查底层的 table。首先是 Shortcut table Icon column is "The external key to column one of the Icon table。”图标 table 包含一个主键(由快捷方式 table 引用)和一个二进制条目。二进制数据是要使用的图标数据。

由于实际的图标数据必须存储在生成的 .msi 数据库中,并且没有其他方法来指定图标,因此您不能引用系统中可能已经存在的图标。您可以将所需的图标复制到图标 table 的资源中,但这与本机 Windows 安装程序功能所能提供的一样接近。

一个 WixEdit 示例,包括用户指南快捷方式图标的单独图标文件。

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="some-guid" Name="MyApp" Language="1033" Version="1.2.3.4" Manufacturer="MyCompany" UpgradeCode="some-guid">
        <Package Description="An application with a user guide" Comments="Packed with WixEdit" InstallerVersion="200" Compressed="yes" />
        <Media Id="1" Cabinet="files.cab" EmbedCab="yes" />
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder" Name="PFiles">
                <Directory Id="MYAPP" Name="MyApp">

                    <Component Id="APPHELP.CHM" DiskId="1" Guid="some-guid">
                        <File Id="APPHELP.CHM" Name="AppHelp.chm" Source="Sources\Files\AppHelp.chm">
                            <Shortcut Id="HelpShortcut" Name="MyApp User Guide" Directory="ProgramMenuDir" Advertise="yes" Icon="HelpIcon.ico" />
                        </File>
                    </Component>

                    <Component Id="APPHELP.ICO" DiskId="1" Guid="some-guid">
                        <File Id="APPHELP.ICO" Name="AppHelp.ico" Source="Sources\Files\AppHelp.ico" />
                    </Component>

                </Directory>
            </Directory>

            <Directory Id="ProgramMenuFolder">
                <Directory Id="ProgramMenuDir" Name="MyCompany">
                    <Component Id="StartMenuShortcuts" Guid="some-guid">
                        <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
                        <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
                    </Component>
                </Directory>
            </Directory>
        </Directory>

        <Feature Id="DefaultFeature" Title="Main Feature" Level="1">
            <ComponentRef Id="APPHELP.CHM" />
            <ComponentRef Id="StartMenuShortcuts" />
            <ComponentRef Id="APPHELP.ICO" />
        </Feature>
        
        <Icon Id="HelpIcon.ico" SourceFile="Sources\Files\AppHelp.ico" />
    </Product>
</Wix>