2010-04-07 62 views
1

我在VS2008中構建了一個ActiveX控件安裝程序,它使用CRT和MFC合併模塊進行安裝。當我的控件嘗試在Windows 7上註冊時,它失敗。幫助ActiveX安裝?合併模塊 - Windows Vista和Windows 7

Dependency Walker說,當我嘗試註冊我的控件並且安裝失敗時,我錯過了mfc90u.dll,msvcr90.dll和msvcp90.dll依賴項。合併模塊應該處理這個問題嗎?我的輸出OCX正在使用vsdrpCOMSelfReg選項進行註冊。從我在其他論壇上閱讀的內容來看,這可能不是最好的方法,我現在應該嘗試什麼?

安裝在Windows XP上正常工作。

更新2010年4月8日:

改爲vsdrpCOM並通過(毫無疑問)的安裝得到,然而,MSVCR90.DLL沒有被發現之後。我認爲這是由CRT的合併模塊(microsoft_vc90_crt_x86.msm)處理?在Windows XP上,Dependency Walker在Windows/System32中找到它,而不是像我預期的那樣在SxS文件夾中找到它。在Windows 7上它根本找不到它。我應該把msvcr90.dll放入Windows/System32中嗎?它看起來並不像它。

更新2010年4月20日:

那麼它好像的Dependency Walker在控制自身的頂級依賴MSVCR90.DLL發現,雖然msvcp90.dll和mfc90u.dll都具有隱含/轉發的依賴在msvcr90.dll以及那些不能在Dependency Walker中解決。但是,該控件會正常註冊並運行加載這些庫。這是可以忽略的嗎?

回答

1

您所需要的兩個模塊: - Microsoft_VC90_MFC_x86.msm - Microsoft_VC90_CRT_x86.msm

對於您應該使用 64位的應用程序 - Microsoft_VC90_MFC_x86_64.msm - Microsoft_VC90_CRT_x86_64.msm

不幸自注冊導致很多問題,您應該做的是手動將所需的註冊表項添加到安裝項目中。 (WiX的'heat'工具提供了一個非常簡單的方法來捕獲這些信息,但是如果你編寫了DLL,你應該已經知道所需的條目了)。自注冊的真正問題是,如果失敗,則設置將會消失。最明顯的問題是,如果您的DLL需要額外的模塊才能成功完成自注冊,並且它們正在同時安裝,您不能保證系統會發現它們存在以便自注冊完成。