2014-02-12 38 views
1

我在檢測msi狀態下的修復時遇到問題。
InstallShield中小抄寫的是:
MSI檢測修復模式

REINSTALL~="ALL" AND NOT REINSTALLMODE><"v" 

這意味着重新安裝不區分大小寫等於「ALL」和REINSTALLMODE不包含「V」字母。
在我的MSI中,這個值被設置爲REINSTALL =「ALL」,REINSTALLMODE =「ocmusv」。爲什麼V字母在那裏?備忘單錯了嗎?什麼是檢測重新安裝的正確方法?

+0

這應該有所幫助:http://stackoverflow.com/questions/320921/how-to-add-a-wix-custom-action-that-happens-only-on-uninstall-via-msi –

+0

謝謝,但我希望得到一些最佳實踐的答案。根據帖子我應該使用:重新安裝和不刪除〜=「所有」和升級產品代碼,並沒有安裝。我對它的期望越高,它在所有需要的情況下都不會正常工作。主要是我想知道爲什麼http://resources.flexerasoftware.com/web/pdf/archive/IS-CHS-Common-MSI-Conditions.pdf在我的情況是錯誤的。 – Marek

+0

我想你可以檢查這個小圖表(第一個答案): http://stackoverflow.com/questions/320921/how-to-add-a-wix-custom-action-that-happens-only-on- uninstall-via-msi?lq = 1 –

回答

3

備忘單對於某些由系統啓動的修復很可能是錯誤的,因爲重新安裝不會是「全部」 - 它將成爲功能名稱。與其他條件相關的問題是屬性名稱區分大小寫,並且安裝條件不拼寫爲「INSTALLED」,這是事實「安裝」。 UPGRADINGPRODUCTCODE不相關,因爲它是在產品通過傳入主要升級進行升級時設置的,與修復無關。另外,我認爲不是所有的修理都設置了「v」,因爲我認爲我已經看到了修復命令行「omus」。

試圖檢測修復通常是徒勞的,我的建議是忘記試圖區分修復。所發生的一切就是組件再次被安裝並且可能被破壞。 Installed屬性將被設置,因此您知道這不是全新安裝,並且將安裝REINSTALL,因爲正在安裝一個或多個功能。不知道你想用這種條件來完成什麼,我不知道還有什麼要說的。有時候說出你想要解決的問題會更有用。

+0

謝謝你的回答。我試圖解決我的困惑,因爲在作弊表中寫入了某些內容,並且對於僅在添加或刪除程序中單擊「修復」的基本方案,它不起作用。 – Marek

+0

是的,修復添加/刪除程序是我見過「omus」命令行的地方。 – PhilDW

+0

我通常只是禁用自動修復過程中不需要重新運行的自定義操作,而不需要其他任何條件。需要關於這個人想要達到什麼的更多細節。 –