2016-07-05 74 views
0

我們使用wix 3.9.1208.0來生成MSI。以下代碼預先將值設置爲Upperfilters註冊表項。安裝後發現MSI Registry註冊前額未更新

<RegistryKey Id="UpperFilters" Root="HKLM" Key="xxxxxxxxx" Action="create"> <RegistryValue Name="UpperFilters" Type="multiString" Action="prepend" Value="xxxxx"/> </RegistryKey>

,價值不預先考慮到「的UpperFilters」註冊表項,並沒有發現在MSI日誌中的任何錯誤。這個問題只發生過一次。

MSI日誌:

MSI(S)(℃:28)[10:38:08:835]:執行運算:ComponentRegister(COMPONENTID = XXXX,的keyPath = 02:XXXXX,狀態= 3 (Disk:1,SharedDllRefCount = 0,BinaryType = 0) MSI(0C:28)[10:38:24:455]:執行op:RegOpenKey(Root = -2147483646,Key = xxxxx ,, BinaryType = 0 ,,) MSI(S)(℃:28)[10:38:24:456]:執行運算:RegAddValue(名稱=的UpperFilters,值= XXXXX [〜],)

是MSI當無法更新註冊表時返回任何失敗?

是否所有註冊表失敗都記錄在MSI日誌中?

我的情況是什麼問題?

在此先感謝。

回答

0

它可能有助於顯示更多的日誌。很難從這些日誌片斷中知道發生了什麼。 ComponentRegister通常不在RegOpenKey旁邊 - 它只是註冊表中的keypath的註冊表,並且與實際問題無關。

有幾件事情可能是錯誤的:

爲什麼組件id爲xxxx?當你發佈日誌信息時,你隱藏了實際的guid嗎?還是你實際使用的是?這不是合法的身份證件。

這是一個64位系統,您試圖更新32位註冊表。在不知道系統位數和MSI架構的情況下,我們無法確定是否更新了所需的密鑰。

如果現有數據中沒有任何內容,則預先計劃並不會真正做任何事情,因此,如果之前沒有看到數據和之後的數據,則不清楚它是否正常工作(因爲沒有任何要預先考慮的內容)或失敗(因爲它實際上並沒有將您的數據添加到現有數據中)。

+0

發佈前隱藏組件ID。它是一個64位計算機,並在'HKLM \ System \ CurrentControlSet \ Control \ Class \ {4d36e967-e325-11ce-bfc1-08002be10318}'註冊表配置單元之前添加了'UpperFilters'註冊表項。 'UpperFilters'註冊表項在前置前有'PartMgr'值。 – Ninja

+0

這與系統無關。問題是安裝和包含註冊表的組件的體系結構是什麼。如果密鑰位於WoW6432中,則32位MSI不會更新本機64位註冊表。 – PhilDW