如何更改将安装所有 dll 和其他文件的 wxs 文件中的目录?
How to change directory in wxs file where all dll and other files will be installed?
我对在 .NET 项目中使用 .wxs
文件创建安装项目还很陌生。我知道默认情况下,当您 运行 MSI 文件时,它会在 C:\Program Files (x86)
中创建包含此项目的文件夹及其参考文件(dll、exe 等...)。我的问题是,我可以使用 XML 将 .wxs
文件中的这个位置更改为另一个位置吗?
ConfigurableDirectory:您可以使用 ConfigurableDirectory
属性 Feature Element to set a configurable feature directory. See down the page in the screenshot section here: How to assign path value to Directory in WIX?.
仅模型:
注意:我基于标准 WiX Mondo 对话框集。 To hook up the Mondo dialogs, see this answer。本质上,添加对 WixUIExtension.dll
的引用并插入 <UIRef Id="WixUI_Mondo" />
元素。这会将默认的 WiX 对话框集编译到您的 MSI 中。
<Feature Id="MyFeature" Title="MyFeature" Level="1" ConfigurableDirectory="INSTALLFOLDER"></Feature>
<..>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="InstallDirConfigurableTesting">
记住属性:请注意,您必须自己将自定义目录位置保存到注册表并回读主要内容升级,否则您的整个产品在升级过程中会得到 "moved"(我知道,这很奇怪)。这种持久性不会以我所知道的任何方式自动神奇地发生。您可以保留 属性 并使用 "Remember Pattern" 读回它,正如 WiX 的创建者和仁慈的 Rob Mensching 在此处所描述的:The WiX toolset's "Remember Property" pattern.
实现技巧:针对主要升级场景测试目录属性的回读可能有点繁琐.如果您使用 Votive 在 Visual Studio 中创建一个测试项目,您可以使用该技巧来编译 MSI 的版本 1(现在在构建输出文件夹中为您的 MSI 文件添加后缀 _Version1.0.0.msi
或类似),然后启动版本号的前三位数字之一 属性 并构建升级版本(后缀为 _Version2.0.0.msi
或类似)。然后您按顺序安装,选择一个自定义安装目录,并检查您的第二个安装程序是否正确检测到修改后的路径。只需使用其中包含单个组件的模型或测试工具项目来使其正常工作,否则如果您必须编译整个设置,您可能会把自己逼疯。然后只需将完成的标记注入主项目即可。很明显,是的 - 只是提到。
一些进一步的链接:
- How to use ProgramFiles64Folder in ConfigurableDirectory
- What is the meaning of WiX configurable directory?
我对在 .NET 项目中使用 .wxs
文件创建安装项目还很陌生。我知道默认情况下,当您 运行 MSI 文件时,它会在 C:\Program Files (x86)
中创建包含此项目的文件夹及其参考文件(dll、exe 等...)。我的问题是,我可以使用 XML 将 .wxs
文件中的这个位置更改为另一个位置吗?
ConfigurableDirectory:您可以使用 ConfigurableDirectory
属性 Feature Element to set a configurable feature directory. See down the page in the screenshot section here: How to assign path value to Directory in WIX?.
仅模型:
注意:我基于标准 WiX Mondo 对话框集。 To hook up the Mondo dialogs, see this answer。本质上,添加对 WixUIExtension.dll
的引用并插入 <UIRef Id="WixUI_Mondo" />
元素。这会将默认的 WiX 对话框集编译到您的 MSI 中。
<Feature Id="MyFeature" Title="MyFeature" Level="1" ConfigurableDirectory="INSTALLFOLDER"></Feature>
<..>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="InstallDirConfigurableTesting">
记住属性:请注意,您必须自己将自定义目录位置保存到注册表并回读主要内容升级,否则您的整个产品在升级过程中会得到 "moved"(我知道,这很奇怪)。这种持久性不会以我所知道的任何方式自动神奇地发生。您可以保留 属性 并使用 "Remember Pattern" 读回它,正如 WiX 的创建者和仁慈的 Rob Mensching 在此处所描述的:The WiX toolset's "Remember Property" pattern.
实现技巧:针对主要升级场景测试目录属性的回读可能有点繁琐.如果您使用 Votive 在 Visual Studio 中创建一个测试项目,您可以使用该技巧来编译 MSI 的版本 1(现在在构建输出文件夹中为您的 MSI 文件添加后缀 _Version1.0.0.msi
或类似),然后启动版本号的前三位数字之一 属性 并构建升级版本(后缀为 _Version2.0.0.msi
或类似)。然后您按顺序安装,选择一个自定义安装目录,并检查您的第二个安装程序是否正确检测到修改后的路径。只需使用其中包含单个组件的模型或测试工具项目来使其正常工作,否则如果您必须编译整个设置,您可能会把自己逼疯。然后只需将完成的标记注入主项目即可。很明显,是的 - 只是提到。
一些进一步的链接:
- How to use ProgramFiles64Folder in ConfigurableDirectory
- What is the meaning of WiX configurable directory?