我正在尝试使用 wix 3.8 进行安装程序。我可以使用自定义属性来存储我自己的输入,但我想使用以前安装的 msi 上的输入值。有没有办法完成这样的事情?
3 回答
一般来说,没有。Windows 安装程序包不需要记录它从用户那里获得的输入。有些确实在注册表中记录了一些信息,您可能会选择依赖在那里找到它。
作为替代方案,您可能会发现其他安装程序可以在没有 UI 的情况下运行,并且可以通过传入的属性进行充分控制。如果是这样,您可以编写自己的 UI(一种方法是自定义 WiX Bootrapper 应用程序[示例])在运行安装程序之前收集输入。
为了让您朝着正确的方向前进,请在您的第一个 MSI 中添加这个(当然首先要适应您的需要):
<DirectoryRef Id="INSTALLDIR">
<Component Id="RegistryEntries" Guid="{0AC76129-F8E2-47D3-B9FD-09B1E10A8541}">
<RegistryKey Root="HKLM" Key="Software\Company123\App123" Action="create">
<RegistryValue Type="integer" Name="SomeIntegerValue" Value="1" KeyPath="yes"/>
<RegistryValue Type="string" Name="UserInput" Value="[USERINPUT]" />
</RegistryKey>
</Component>
</DirectoryRef>
不要忘记在<Feature>
<ComponentRef Id="RegistryEntries" />
安装时引用组件为属性分配值,[USERINPUT]
例如msiexec /i your.msi /qb+ USERINPUT="the value to be saved in registry"
然后在第二个 MSI 中添加如下内容:
<Property Id="READREGISTRY">
<RegistrySearch Id="USERINPUT_Value" Root="HKLM" Key="Software\Company123\App123" Name="UserInput" Type="raw" />
</Property>
您在安装期间输入的值/字符串USERINPUT=
将存储在属性中的第二个 MSI 中READREGISTRY
这是我的第二个 msi 中的一段日志:
PROPERTY CHANGE: Adding READREGISTRY property. Its value is 'testing registry wef wef wef w'.
根据您的安装,它可能是 Per User 或 Per Machine,您可以将 Root 调整为 HKCU 以进行 PerUser 安装,或者将其留给 HKLM 以进行 PerMachine。
有关更多信息,请参阅 Wix 文档,提示:“如何:在安装期间编写注册表项”和“如何:在安装期间读取注册表项”。
在首先安装的 MSI 中创建自定义操作,然后将所需的值/用户条目写入文件或注册表。在您的最终 MSI 中,从注册表/文件中读取值并使用它。
这是一个如何从用户读取值并更新您的 app.config 的示例,这不是苹果到苹果的场景,但这将引导您完成它。
http://bensnose.blogspot.com/2013/03/more-custom-actions-with-wix.html
免责声明:我没有尝试过这篇博文中提到的内容,但我做了非常相似的事情,发现它有很好的解释,这就是我发布链接的原因。