2016-08-24 78 views
3

我工作的應用程序主要是用VB6編寫的。診斷自我修復MSI

有些用戶報告說,當他們啓動我的應用程序時,不同的MSI安裝程序將自動運行並嘗試修復其自己的安裝。通常這是用於AutoCAD,但有時也是其他程序。

通常每次啓動應用程序時都會發生這種情況。

什麼是我們可以用來診斷這種情況的原因的程序?由於它是正在運行的第三方安裝程序,因此我們無法看到它正在執行的操作。

AutoDesk公司確實有一些信息,在此公佈:

但這些並不直接提供足夠的信息。 理想情況下,我希望能夠完全防止這種情況發生在我的最終用戶上,而不僅僅是告訴他們如何避免或清除它。

+1

第一個鏈接描述了您應該查找的事件日誌條目類型。它會告訴你Windows Installer檢測到需要修復的組件。您需要找出該組件需要修復的原因,或者更好地描述它,以便我們提供幫助。另請參閱http://stackoverflow.com/questions/5501028/how-can-i-determine-what-c​​auses-repeated-windows-installer-self-repair –

+0

顯示的安裝程序,是從您的應用程序還是從Autodesk/AutoCAD的? –

+0

這是運行的AutoCAD安裝程序,而不是我們自己的。問題已澄清 - 謝謝。 – DaveInCaz

回答

1

關於Peter Cooper Jr對VB6引起自我修復的評論。請查看Wix的heat.exe文檔。你會看到,有一個特殊的開關的工具支持,以抑制提取由VB6的運行時本身擁有的(因而不應該與被弄亂或更新任何其他MSI)的某些註冊表值:http://wixtoolset.org/documentation/manual/v3/overview/heat.html

從列表中選擇開關-svb6並閱讀右側的說明。 (這裏轉載:)

當登記在VB6創建COM組件它增加了屬於VB6運行時組件的一部分的註冊表條目 :

  • CLSID {D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731 }
  • 類型庫{EA544A21-C82D-11D1-A3E4-00A0C90AEA82}
  • 類型庫{000204EF-0000-0000-C000-000000000046}

[以及]任何引用這兩個類型庫的接口

您的安裝程序是否寫入這些密鑰?如果是這樣,儘量排除它們 - 即使它不是這個特殊情況下的罪魁禍首,這也是很好的做法。

除此之外,有什麼可以導致Windows Installer在這裏自我修復的冗長描述:How can I determine what causes repeated Windows Installer self-repair?。這是一篇很長的文章,因爲有很多不同的方式可以進行自我修復。共同點是系統上的不同安裝程序正在爭奪一個共享設置,以便在每個應用程序啓動過程中以無限循環方式持續更新自己的值。

+0

它看起來像我們的安裝程序不寫這些密鑰;但這是一個非常有用的知識。我已經添加了您引用的鏈接中的關鍵位,以防將來消失。 – DaveInCaz

+0

我批准了編輯。好的電話,謝謝。 –

2

您的安裝程序正在處理Windows安裝程序所瞭解的目錄,文件或註冊表項,它是AutoCad安裝的一部分。

首先,我打開全局Windows Installer日誌記錄。這意味着任何Windows Installer活動(包括AutoCad的安裝程序)都會寫入外部日誌文件(在%temp%中)。

接下來,運行您的安裝,並讓AutoCAD的安裝程序運行。

現在轉到%temp%,您應該找到文件MSIXXXX.LOG - 一個用於安裝程序,一個用於AutoCad。打開這些,你可以通過他們的方式,並確定哪些文件或註冊表鍵AutoCad MSI找到丟失或更改。

您可能會發現WiLogUtl.exe對此很有幫助:

如果幸運的話,你會確定的目錄,文件或註冊表鍵觸發autorepair也是您的安裝。如果你真的很幸運,你可以將它識別爲一個你不應該安裝的項目 - 也許你正在引用一個系統組件,無論如何,這個組件都會被Windows文件保護保護。

如果沒有,您將不得不看像RegFree COM這樣的文件,將文件從共享目錄移出到您的私人目錄中,並減少註冊表衝突。另外,如果您使用(使用)Visual C++運行時MSM來創建MSI,請考慮使用Microsoft EXE安裝程序,或者(最重要的是)將DLL直接放在程序文件夾中,因爲我發現MSM可以造成這種問題。