Ult*_*nks 4 installation windows-installer wix
我使用WiX Toolset编写了一个新的安装程序。看来最佳实践是使用 heat.exe 应用程序运行构建的应用程序文件并自动生成引用以包含在安装程序中。这很棒,但我发现通过使用这种技术,您几乎可以阻止这些文件在其他任何地方发挥作用,除了将它们复制到安装目录的行为之外。这是因为我似乎无法“引用”这些文件来进行其他操作。例如。我想将其中一个文件安装为服务,但ServiceInstall机制似乎不允许您使用收获中引用的内容。另外,我的文件之一是一个 XML 文件,我想根据安装过程中用户的输入进行修改。同样,我似乎无法在XmlConfig机制中使用的收获中引用此文件。
我看过这篇文章,但所选答案实际上并未提供示例。首先,WiX 编译器不允许您在标识符字段中放置“#”符号,因为正如答案帖子所声称的那样,它“不是合法的标识符”。如果您使用收获中的普通 ID,它会抱怨它们已经存在。
这是我的收获 .wxs 文件的片段。
<!-- Xml file I'd like to modify during install -->
<Component Id="cmp78CF3591818BB6F883096F2C98654BA9" Guid="*">
<File Id="fil1532F0BC6EDCE81B25489D872A72339A" KeyPath="yes" Source="$(var.MyApplication.TargetDir)\log.config" />
</Component>
<!-- ... -->
<!-- Application I'd like to install as a service -->
<Component Id="cmp84F0EA671F93094E33AE84FA2A03BA2E" Guid="*">
<File Id="filD4A27A27D20D3D734B279B4F21754836" KeyPath="yes" Source="$(var.MyApplication.TargetDir)\MyService.exe" />
</Component>
Run Code Online (Sandbox Code Playgroud)
对于服务安装,我觉得直观的方式是这样的:
<Component Id="cmp84F0EA671F93094E33AE84FA2A03BA2E">
<File Id="filD4A27A27D20D3D734B279B4F21754836" />
<ServiceInstall
Id="MyServiceID"
Name="MyService"
Type="ownProcess"
Start="auto"
ErrorControl="normal"
Interactive="no">
</ServiceInstall>
<ServiceControl Name="MyService" Id="MyServiceControl" Start="install" Stop="both" Remove="uninstall" Wait="yes"/>
</Component>
Run Code Online (Sandbox Code Playgroud)
但当然这是行不通的,因为它声称 ID 是重复的。我猜它们是,但我怎么说“你知道收获中的文件‘X’......是的,我想将其安装为服务。” 我已经能够让安装正常工作,但我必须从收获中过滤掉 MyService.exe 并手动添加它。现在,如果每次您实际上想对特定文件执行某些操作时都是这种情况,那么我想我可能只是忘记使用愚蠢的 heat.exe 技术并手动输入每个文件。那么,您将使用什么语法来引用 heat.exe 收获中的文件呢?
| 归档时间: |
|
| 查看次数: |
1522 次 |
| 最近记录: |