繁体   English   中英

Wix-如何从以前安装的MSI获取用户输入?

[英]Wix - How to get user input from a previously installed msi?

我正在尝试使用wix 3.8进行安装。 我可以使用自定义属性来存储自己的输入,但是我想使用以前安装的msi上的输入值。 有没有办法完成这样的事情?

通常,不会。 Windows Installer程序包不需要记录它从用户那里获取的输入。 有些确实在注册表中记录了一些信息,您可能会选择依赖在那里找到它。

或者,您可能会发现另一个安装程序可以在没有UI的情况下运行,并且可以通过传递给它的属性进行充分控制。 如果是这样,则可以在运行安装程序之前编写自己的UI(一种方法是自定义WiX Bootrapper应用程序[example] )来收集输入。

为了使您朝正确的方向前进,请在您的第一台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'.

根据您的安装情况(可能是“每用户”或“每台计算机”),您可以将“根”调整为HKCU(用于PerUser安装),或将其保留给HKLM(用于PerMachine)。

有关更多信息,请参考Wix文档,提示:“如何:在安装过程中编写注册表项”和“如何:在安装过程中读取注册表项”。

在首先安装的MSI中创建自定义操作,然后将所需的值/用户条目写入文件或注册表。 在最终的MSI中,从注册表/文件中读取值并使用它。

这是一个如何从用户读取值并更新app.config的示例,这不是“苹果到苹果”的情况,但这将指导您完成操作。

http://bensnose.blogspot.com/2013/03/more-custom-actions-with-wix.html

免责声明:我还没有尝试过本博客文章中提到的内容,但是我做的事情非常相似,发现它有很好的解释,这就是为什么我发布了链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM