簡體   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