gpt4 book ai didi

WiX - 在安装时设置合并模块目录?

转载 作者:行者123 更新时间:2023-12-01 09:28:10 26 4
gpt4 key购买 nike

我已经按照 Wix 入门指南中的说明创建了一个合并模块,该指南位于:http://wix.sourceforge.net/manual-wix2/authoring_merge_modules.htm .

这是合并模块 wxs:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Module Id="SomeRepositoryMergeModule" Language="1033" Version="1.0.0.0">
<Package Id="f11e7321-a687-4d53-8be7-21a8ae0721a6" Manufacturer="SomeCompany Technologies" InstallerVersion="200" />

<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="MODULEINSTALLLOCATION" Name="Some Repository">
<Component Id="ServicesHostWindowsService" Guid="257D1FAE-4AFF-4155-BDB8-D81F50E5862B">
<File Id="ServicesHostInstallerExecutable" KeyPath="yes" DiskId="1" Name="WindowsServiceHost.exe" Source="..\WindowsServiceHost\bin\Output_For_Installer\WindowsServiceHost.exe" />
<File Id="ServicesHostConfig" KeyPath="no" DiskId="1" Name="WindowsServiceHost.exe.config" Source="..\WindowsServiceHost\bin\Output_For_Installer\WindowsServiceHost.exe.config" />
<File Id="SomeCompanyCommon" KeyPath="no" DiskId="1" Name="SomeCompany.Common.dll" Source="..\WindowsServiceHost\bin\Output_For_Installer\SomeCompany.Common.dll" />
<File Id="SomeRepositorySqlScript" KeyPath="no" DiskId="1" Name="SomeRepository.sql" Source="..\..\..\..\..\DB\SomeRepository\SomeRepository.sql" />
<File Id="LogConfigXml" KeyPath="no" DiskId="1" Name="log.config.xml" Source="..\WindowsService\log.config.xml" />
<ServiceInstall Id="ServicesHostInstallElement" ErrorControl="normal" Start="auto" Type="ownProcess" Vital="yes"
Name="AServer WindowsService Host"
Description="The windows service responsible for hosting SomeCompany Some Repository's WindowsService."
/>
<ServiceControl Id="ServicesHostController" Name="AServer WindowsService Host" Remove="uninstall" Start="install" Stop="uninstall" Wait="no" />
</Component>
</Directory>
</Directory>
</Directory>
<ComponentGroupRef Id="Product.Generated" /><!-- Harvested by heat -->
</Module>
</Wix>

这是主要产品 wxs:

    <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />

<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="SomeCompanyGlobalDir" Name="SomeCompany Technologies">
<Directory Id="INSTALLLOCATION" Name="Some Repository">
<Merge Id='SomeRepositoryPrimaryModule' Language='1033' SourceFile='..\SomeRepositoryMergeModule\bin\Output_For_Installer\SomeRepositoryMergeModule.msm' DiskId='1' />
</Directory>
</Directory>
</Directory>
</Directory>

<Feature Id="ProductFeature" Title="SomeRepositoryStandaloneInstaller" Level="1">
<!-- Note: The following ComponentGroupRef is required to pull in generated authoring from project references. -->
<MergeRef Id="SomeRepositoryPrimaryModule"/>
</Feature>

<UIRef Id="WixUI_InstallDir" />
<UIRef Id="WixUI_ErrorProgressText" />
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />

当我构建并运行安装程序时,合并模块中的文件不会进入用户从安装程序 UI 中选择的目录。不管怎样,它们都会进入“[Program Files]\SomeCompany Technologies\Some Repository\”目录。

如果我从合并模块目录路径中删除对 Program Files 的引用并使用名称为“.”的根目录选择父 MSI 的父目录,然后合并模块就可以很好地选择用户选择的目录。但是随后 Visual Studio 在构建时抛出一个错误,表示收集将不起作用,因为该路径必须以标准目录之一为根,以便使用自动生成的 Guid。

那么如何才能让合并模块在安装时采用用户选择的目录,同时仍然保持合并模块路径以标准目录为根?

最佳答案

您混淆了 MSI,因为 ProgramFilesFolder 是保留的属性名称。将该值更改为“MergeRedirectFolder”,并且凭借 ID 为 INSTALLLOCATION 的 Directory 元素下的 Merge 元素,MergeRedirectFolder 将与 INSTALLLOCATION 相关联。 Some Repository ([MODULEINSTALLLOCATION]) 目录将成为 INSTALLLOCATION 的子目录。

也可以随时查看 ISWIX CodePlex 上的项目。它对于编写和维护合并模块很有用,并且具有与您在这里尝试执行的操作相关的示例源代码。

关于WiX - 在安装时设置合并模块目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com