簡體   English   中英

WiX根據注冊表值更改UI行為

[英]WiX Changing UI behavior based on registry value

簡短的版本是我正在構建安裝程序包,並且我希望我的歡迎屏幕上的“下一步”按鈕根據是否存在特定的注冊表項來更改其行為。 看來我應該能夠修改下一個按鈕動作的條件以獲得這種行為,但到目前為止還算不上什么。 我總是得到行為A或行為B,但我沒有得到對注冊表值敏感的行為。

我應該注意,我可以完全刪除UI並通過命令行運行程序包以獲得所需的結果,但是我嘗試通過在適當時添加安裝路徑對話框來使用戶更加友好。

更詳細一點...

我正在為一系列獨立但相關的類庫進行安裝。 如果我們在一個干凈的盒子上安裝一個庫,我希望安裝程序提示用戶輸入安裝路徑,然后在安裝過程中將此路徑寫到注冊表中。 但是,如果我們在已經有其他庫之一存在的盒子上安裝庫,則我希望安裝程序讀取注冊表並使用與先前安裝相同的路徑。

我的想法是修改標准的WixUI_InstallDir接口,以檢查注冊表搜索結果,並跳過InstallDirDlg(如果已設置)。 但是,這似乎不起作用。 這是XML的一些片段:

<Property Id="FOOPATH">
  <RegistrySearch Id="PathSet" Type="directory" Root="HKLM" Key="Software\Foo" Name="InstallPath"></RegistrySearch>
</Property>
<Property Id="PATHSET">
  <RegistrySearch Id="PathSet" Type="directory" Root="HKLM" Key="Software\Foo" Name="InstallPath"></RegistrySearch>
</Property>

<Directory Id="FOOPATH" Name="Foo">
  <Component Id="FooPathReg" Guid="Some Guid">
    <RegistryKey Root="HKLM" Key="Software\Foo" Action="createAndRemoveOnUninstall">
      <RegistryValue Name="InstallPath" Type="string" Value="[FOOPATH]" KeyPath="yes"></RegistryValue>
    </RegistryKey>
  </Component>
</Directory>

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">NOT Installed AND NOT PATHSET</Publish>
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">NOT Installed AND PATHSET</Publish>

如果我的發布條件使用的是PATHSET屬性(如圖所示),那么我將始終顯示安裝目錄對話框,如果將它們切換為使用FOOPATH屬性,則將永遠不會顯示該對話框。 我也嘗試過使用InstallUISequence,看來安排AppSearch操作多早無關緊要,但仍然得到相同的結果。

有什么簡單的我想念的嗎? 還是我需要采取另一種方法?

  1. 檢查詳細日志以查看是否按預期設置了屬性。
  2. 使用Orca查看ControlEvent是否符合預期。 用戶界面是附加的,因此當您要替換庫存用戶界面時,您必須采取額外的步驟。 例如,請參閱http://neilsleightholm.blogspot.com/2008/08/customised-uis-for-wix.html

好的,這原來是我在測試過程中遺漏某些東西的大腦死亡時刻之一。 我正在填寫它為什么失敗的詳細信息,希望它可以使其他人在進行此開發時遇到的挫敗感免於受挫。

首先,重要的是要知道我並未真正測試多個軟件包,我試圖讓我的基礎結構與第一個軟件包一起工作,然后在我認為我已經相當接近的情況下將其應用於其余軟件包,這是為了幫助減少我需要在一組軟件包之間復制的更改數量。 為此,我在運行程序包之前通過模擬先前的安裝來手動添加有問題的注冊表項。

我忽略的實際上是創建注冊表項引用的目錄。 我正在與一位同事一起瀏覽整個過程,在解釋過程中,我注意到了日志的這一部分:

Action start 8:26:16: AppSearch.
MSI (c) (BC:D4) [08:26:16:505]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (c) (BC:D4) [08:26:16:506]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (c) (BC:D4) [08:26:16:507]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (c) (BC:D4) [08:26:16:507]: PROPERTY CHANGE: Adding NETFRAMEWORK35 property. Its value is '#1'.
Action ended 8:26:16: AppSearch. Return value 1.

我想到嘗試創建由注冊表值以及注冊表值本身引用的目錄。 一旦目錄存在,所有內容就會開始正常工作。

顯然,當您告訴RegistrySearcher該值是一個目錄時,僅當該目錄實際存在時才將值設置為屬性。 盡管在回溯時我可以看到它的隱含含義,但是在我對該主題進行搜索時,從來沒有出現過這個細節,並且在找到的文檔中也不清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM