2013-04-04 81 views
0

維克斯MSI安裝程序perMachine寫作安裝屬性HKCU而非HKLM。WIX MSI安裝程序perMachine寫作安裝屬性HKCU而非HKLM

其中一個症狀是我用來檢測嘗試安裝舊版本產品的原始邏輯失敗,因爲我依賴於Installed屬性在先前已執行安裝的系統上定義。要明確這個邏輯在過去有效,但現在我正在進行迴歸測試,並且失敗了。

我用orca編輯了msi,並修改了測試這個的啓動條件。我將啓動條件更改爲「已安裝」,並將消息更改爲「未安裝」,然後在安裝了我們的應用程序的多個系統上運行安裝程序。如果Installed爲true,那麼安裝程序將運行,但在任何情況下,安裝程序都會顯示消息框,表示它找不到註冊表項。

我看了所有這些系統和「安裝」註冊表項是位於HKCU /軟件/公司/產品/安裝= 1而不是HKLM。

而且這是一個64位安裝程序,當我運行安裝程序,再次進入UI,我看任務管理器,以確保它運行MSIEXEC它是64位版本。

下面是停止工作的相關WIX片段。查看第一個啓動條件。我正在添加Product ...部分的開頭。

<Product Id="*" 
Name="$(var.ProductDisplayName)" 
Language="1033" 
Version="$(var.OurVersion)" 
Manufacturer="$(var.ProductAuthor)" 
UpgradeCode="$(var.ProductUpgradeCode)"> 
<Product Id="*" 
Name="$(var.ProductDisplayName)" 
Language="1033" 
Version="$(var.VayTekVersion)" 
Manufacturer="$(var.ProductAuthor)" 
UpgradeCode="$(var.ProductUpgradeCode)" 
> 

<Package 
    Description="$(var.ProductDisplayName)" 
    Comments="$(var.ProductDisplayComment)" 
    Manufacturer="$(var.ProductAuthor)" 
    InstallerVersion="301" Compressed="yes" 
    Platform="$(var.Platform)" 
    InstallScope="perMachine" 
    InstallPrivileges="elevated"/> 

<Upgrade Id="$(var.ProductUpgradeCode)"> 
<UpgradeVersion Minimum="$(var.OurVersion)" 
    IncludeMinimum="no" 
    OnlyDetect="yes" 
    Property="NEWERPRODUCTFOUND" /> 
<UpgradeVersion 
    Minimum="07.01.01001" IncludeMinimum="yes" 
    Maximum="$(var.OurVersion)" IncludeMaximum="no" 
    Property="PREVIOUSVERSIONSINSTALLED"/> 
</Upgrade> 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallFinalize"/> 
</InstallExecuteSequence> 

<Condition 
    Message="A later version of the product is already installed. Setup will now exit."> 
    (NOT NEWERPRODUCTFOUND) OR (NOT Installed) 
</Condition> 

後,我在代碼盯着,而我去掉了「不安裝」邏輯和左

NOT NEWERPRODUCTFOUND 

這不是理想的,但在大多數情況下工作。

任何人都有一個想法,爲什麼註冊表項被放置在錯誤的配置單元?

回答

2

MSI軟件包是按機器當ALLUSERS屬性被設置爲「1」。在WiX工具集中,您可以使用Package元素InstallScope屬性將其設置爲「perMachine」。

此外,升級將不會檢測到其他安裝範圍中的軟件包。換句話說,每臺機器無法升級每個用戶,反之亦然。

PS:"NOT Installed"LaunchCondition是看到一個非常奇怪的事情。這隻會嘗試阻止修復/卸載。

+0

我不包括具有InstallScope的定義WXS的一部分,但它被設置爲perMachine,一直以來發展的初期,幾年前。 – mooncaptain 2013-04-04 21:07:39

+0

感謝您對未安裝的提示 - 我想這是在開發安裝程序的早期階段,我把它留在 – mooncaptain 2013-04-04 21:09:39

+0

如果我已經設置了InstallScope =「perMachine」爲什麼註冊表項不會在HKLM中獲得HKCU在哪裏找到的?我可能會採取其他一些行動來解決這個問題。我最近添加了一些影響註冊表的Wow6432Node部分的註冊表項,因爲我添加了對我們的應用程序調用的僅32位應用程序的支持。可以重定向註冊表項的存儲嗎? – mooncaptain 2013-04-04 21:15:39