[英]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.