2011-06-16 62 views
1

我有2個版本的產品「product1」(1.2.2.2和1.2.2.3)。msi重新安裝windows7問題

對於升級/降級,product1正在使用「reinstall = all reinstallmode = vamus」MSI參數,因此始終新文件將位於安裝目錄中。

如果我從1.2.2.2升級到1.2.2.3,並非所有新文件都應對安裝目錄。 我只在Windows 7(x86和x64)上面臨這個問題。 XP沒有問題(包括x86和x64)。

我在xp和win7上比較了日誌。我發現以下差異。

XP: SetSourceFolder(文件夾= 1家\ PROGRA〜1家\公司〜1個\產品〜1個\ DRIVERS \ |程序文件\公司名稱\產品名\驅動程序)

WIN7: 執行OP:SetSourceFolder(文件夾= C:\ Windows \ Installer \ $ PatchCache $ \ Managed \ A7C0B53D545489A48A0183013BEF525E \ 1.2.2)

這是我的設置。我們的產品支持升級和降級。爲了儘可能簡化客戶端,我們選擇「REINSTALL = ALL REINSTALLMODE = vamus」,以便這些選項支持升級和降級。另一個重要的一點是,這個MSI沒有單獨的升級或降級信息。微星有平面組件。 MSI內部的所有組件均已簽名。版本信息也嵌入。 我的問題是 1)在Windows7上,Windows安裝程序的行爲改變了嗎? 2)安裝程序是否只將a.b.c作爲版本信息?之後它會忽略嗎?

另一個重要的一點是,此MSI沒有單獨的升級或降級信息。微星有平面組件。 「REINSTALL = ALL REINSTALLMODE = vamus」參數可確保始終運行msi版本組件進入安裝目錄。到目前爲止,這種方法已運行近5年。只有win7有問題。

要重現這個問題... 1)MSIEXEC安裝1.2.2.2 /我1.2.2.2.msi 2)降級到1.2.2.1沒有問題MSIEXEC/I 1.2.2.1.msi安裝=所有重建= vamus 3)升級到1.2.2.2導致問題msiexec/i 1.2.2.2.msi REINSTALL = ALL REINSTALLMODE = vamus 4)重試再次升級到1.2.2.2。這一次沒有問題。

另一個觀察結果是,MSI中的一個組件稱「comp1」有2個文件,分別爲file1,file2。 File1是組件comp1的關鍵路徑。 問題發生時(步驟3),file1沒有得到更新。但是file2正在更新。

另一種觀察。我在不同的版本上運行測試。

- >升級1.2.1.1和1.2.2.1之間/降級如預期工作 - >升級1.2.1.1和1.2.1.2之間/降級工作不按預期 - >升級/降級1.2之間.2.1和1.2.2.2未按預期工作

如上所述Windows安裝程序正在考慮版本高達abc升級/降級a.b.c.x和a.b.c.Ÿ是Windows-7

+0

請提供一些更多的信息差異。這是您自己的設置還是您嘗試從第三方安裝的設置?它看起來像你正在安裝驅動程序。什麼驅動?他們簽字了嗎?如果它是第三方產品,哪個產品? – 2011-06-16 13:18:30

+0

這是我的設置。我們的產品支持升級和降級。爲了儘可能簡化客戶端,我們選擇「REINSTALL = ALL REINSTALLMODE = vamus」,以便這些選項支持升級和降級。另一個重要的一點是,這個MSI沒有單獨的升級或降級信息。微星有平面組件。 MSI內部的所有組件均已簽名。版本信息也嵌入。我的問題是1)的Windows安裝程序的行爲改變了win7? 2)安裝程序是否僅將a.b.c作爲版本信息?之後它會忽略嗎? – Rajeshaz09 2011-06-17 05:08:22

+0

另一個重要的一點是,這個MSI沒有單獨的升級或降級信息。微星有平面組件。 「REINSTALL = ALL REINSTALLMODE = vamus」參數可確保始終運行msi版本組件進入安裝目錄。到目前爲止,這種方法已運行近5年。只有win7有問題。 – Rajeshaz09 2011-06-17 05:11:13

回答

-1

造成問題的正確參數是:

REINSTALL="ALL" REINSTALLMODE="vamus" 

屬性是大小寫敏感的,它們的值必須用引號括起來。

+0

對我而言,這是一個罕見的失望,但是Jon Skeet認爲這是「積極無益」。將REINSTALLMODE設置爲vamus對於可能包含合併模塊的設置非常危險,否則會對不屬於您的文件造成混亂。它可能會降級系統組件,Windows 7可能會積極嘗試阻止這一點。將o換爲o並使其成爲vomus以獲得安全的方法(如果文件丟失或者是舊版本,請重新安裝 - http://msdn.microsoft.com/zh-cn/library/aa371182(v=vs.85)的.aspx)。 – 2011-06-16 13:16:40

+0

我同意你關於REINSTALLMODE,但我認爲downvote是不需要的。首先,我提出了Rajeshaz09正在使用的參數的正確形式。其次,他提到在次要升級期間沒有安裝文件,這通常發生在兩個軟件包中的文件具有相同版本時。所以使用「o」而不是「a」將不起作用。 – 2011-06-16 13:45:51

+0

我幾乎從不冷靜,除非我認爲信息是危險的。如果最終結果有害,我認爲精確度和句法正確性是無關緊要的。 – 2011-06-16 14:11:04

0

是否所有文件在File table中正確列出了版本和日期信息?升級包中的版本號是否增加和日期是否稍晚?

File versioning對Windows Installer功能至關重要;默認情況下,沒有版本信息的文件被視爲在重新安裝或升級過程中不應覆蓋的「用戶數據」。因此,升級是最簡單的 - 並且不需要特殊的命令行選項 - 如果它們使用更高的版本號或更新的日期替換文件。

+0

更新了問題描述。 – Rajeshaz09 2011-06-17 05:26:12

+0

啊,很好。然後有幾個問題:在升級時是否有可能正在使用「File1」?我相信你已經考慮過並且可能計劃了在MSI運行時程序本身正在運行的情況,但是Windows Installer本身也可能是錯誤的,例如,如果自定義操作是同時運行的,而不是按順序運行的話。 – ewall 2011-06-17 13:12:35

+0

另一種觀察。我在不同的版本上運行測試。 - >升級/降級1.2.1.1和1.2.2。1按預期工作 - > 1.2.1.1和1.2.1.2之間的升級/降級未按預期工作 - > 1.2.2.1和1.2.2.2之間的升級/降級未按預期工作 如上所述窗口安裝程序正在考慮版本高達abc a.b.c.x和a.b.c.y之間的升級/降級導致windows-7上的問題 – Rajeshaz09 2011-06-17 13:59:39

1

只有3個首位數字部分是有價值的,所以 微星沒有作出之間1.2.2.2 1.2.2.3和

+0

WindowsInstaller-5.0版本中引入了這個新限制嗎?相同的安裝程序完全適用於XP。 – Rajeshaz09 2011-06-24 04:46:41