2017-01-04 48 views
2

我們的應用程序之一是VB6應用程序,它需要Tabctl32.ocx。當通過合併模塊安裝Tabctl32時,爲非管理員用戶觸發MSI自我修復

因此,我增加(與版本6.1.97.82包含它)「tabctl32.msm」,以每臺機器基於維克斯。當我運行這臺每臺機器的MSI時,它安裝了OCX,當我作爲管理員登錄並啓動VB應用程序時,該應用程序正常工作。

但是,如果任何人有登錄和標準用戶權限啓動該應用VB是第一次,它觸發的MSI自我修復。一旦該用戶的自我修復完成,它就能夠工作,並且不會再爲該用戶觸發自我修復。這種自我修復不會發生在管理員用戶身上。

當我用Orca檢查MSI時,在「ModuleDependency」表中,此tabctl32模塊與COMCAT msm和OLEAUT32 msm有依賴關係,我們也使用合併模塊安裝它們。

我不明白爲什麼自我修復不會發生爲admin用戶,但對於標準的用戶?

任何人都可以解釋這裏發生了什麼?

回答

3

它可能與標準用戶或管理員用戶或OCX無關 - 它可能只是不同的用戶。

如果MSI中有特定用戶擁有的任何資源(例如個人文件夾或其他人的註冊表項或HKCU中的註冊表項),則第一次安裝將安裝所有這些用於安裝用戶。

如果另一個用戶登錄並使用應用程序(每臺機器安裝,希望)再修觸發(比如使用快捷鍵)會發現,這些用戶的物品丟失了這個特殊的用戶,並安裝它們。這應該只發生一次 - 它修復發生在同一用戶反覆,然後是更嚴重的事情。

在任何情況下,應用程序事件日誌應該有關於產品和缺少部件的一些數據的MsiInstaller日誌條目。

這也可能取決於VB6應用程序 - 這是舊的,沒有明顯的,因此可能與UAC以奇怪的方式進行交互。例如,如果其行爲被虛擬化爲使用系統文件夾的\ VirtualStore位置,那麼可能需要將該選項卡控件重新安裝到該虛擬系統文件夾中。管理員用戶不會有同樣的問題。

+0

你非常接近。實際上,事件查看器有兩個條目: 產品' {A958E33B-5EC8-45C7-B1E0-661D0D7AD318}'的檢測,功能'ThisFeature',組件'{1CD44446-251F-40CC-B158-717060F8A3B6}'失敗。資源'HKEY_CURRENT_USER(64)\ Software \ Company \ InstalledMyAppShortcuts'不存在。 檢測產物的 '{A958E33B-5EC8-45C7-B1E0-661D0D7AD318} ',功能 'ThisFeature' 的組件' {FC3E0B6A-F62B-11D1-B144-00C04F990B2B}請求 – Petronius

+0

過程中失敗但快捷鍵REG沒有按對任何用戶都不存在,因爲它是HKCU特有的。而「{FC3E0B6A-F62B-11D1-B144-00C04F990B2B}」是Tabctl32.ocx的GUID。如果我將Tabctl32.ocx安裝爲鬆散文件而不是合併模塊,則不會發生自我修復。這意味着,我確信捷徑不是罪魁禍首。 – Petronius

+0

不確定這是什麼意思:「快捷鍵註冊表鍵不存在,因爲它是HKCU特定的任何用戶」,因爲每臺機器安裝將安裝它爲安裝用戶而不是其他用戶。您的文章中沒有足夠的信息來說明關鍵文件/註冊表項或者功能中的哪些組件,因爲整個包含的功能已被修復,而不僅僅是組件。 – PhilDW

相關問題