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>
我需要创建我的 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>