我正在尝试使用wix 3.8进行安装。我可以使用自定义属性来存储我自己的输入,但我想使用以前安装的msi上的输入值。 有没有办法完成这样的事情?。
答案 0 :(得分:2)
一般来说,没有。 Windows Installer程序包不需要记录从用户那里获得的输入。有些人会在注册表中记录一些信息,您可能会选择依靠在那里找到它。
作为替代方案,您可能会发现其他安装程序可以在没有UI的情况下运行,并且可以通过传递给它的属性进行充分控制。如果是这样,您可以编写自己的UI(一种方法是自定义WiX Bootrapper应用程序 [example])来在运行安装程序之前收集输入。
答案 1 :(得分:2)
为了让你朝着正确的方向前进,在你的拳头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=
将存储在属性READREGISTRY
这是我的第二个msi中的一条日志:
PROPERTY CHANGE: Adding READREGISTRY property. Its value is 'testing registry wef wef wef w'.
根据您的安装位置,可能是每用户或每台计算机,您可以根据PerUser安装将Root调整为HKCU,或将其留给HKMM for PerMachine。
有关详细信息,请参阅Wix文档,提示:“如何:在安装期间编写注册表项”和“如何:在安装期间读取注册表项”。
答案 2 :(得分:0)
在MSI中创建首先安装的自定义操作,然后将所需的值/用户条目写入文件或注册表。在最终的MSI中,读取注册表/文件中的值并使用它。
以下是如何从用户读取值并更新app.config的示例,这不是苹果到Apple的方案,但这将指导您完成它。
http://bensnose.blogspot.com/2013/03/more-custom-actions-with-wix.html
免责声明:我没有尝试过这篇博文中提到的内容,但我做的事情非常相似,发现它有很好的解释,这就是我发布链接的原因。