簡體   English   中英

自定義操作中的RegAsm

[英]RegAsm in Custom Action

我有一個Outlook Addin,它是在Visual Studio 2010中創建的,面向.NET Framework 4.0。

此插件以前是用VB6編寫的(因此只針對x86 Outlook)。

但是,我現在遇到問題,因為有兩個版本的Outlook。

幾年前我對此進行了修改,但有兩個單獨的MSI文件(一個針對x86,另一個針對x64 ......每個文件都有相應的啟動條件,以防止用戶在其Outlook上安裝不正確的MSI)。

然而,現在我遇到了更大的問題...越來越多的用戶繼續下載不正確的版本,他們生氣了。

我希望制作1個安裝程序文件並注冊以下文件。

  1. Shim x86
  2. Shim x64

我已經將它們放在一個安裝程序文件中(安裝程序的目標是x86),並且我通過訂閱Commit事件通過Custom Action在這些文件上運行RegSvr32

現在問題變成了我有一些.NET DLL。 我基本上有一個DLL(它負責檢查用戶的注冊是否滿足)。

出於某種原因,即使我撥打以下電話:

C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe

還適用於基於x64的系統:

C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\regasm.exe

對我的激活DLL和我的主DLL的完整調用如下:

C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe /tlb MyDll.dll /Codebase

C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\regasm.exe /tlb MyDll.dll /Codebase

代碼運行成功(至少我的假設是它成功運行,因為Try/Catch中沒有拋出錯誤)。

但是,當我通過我的應用程序調試,並調用CreateObject它只返回一個錯誤,指出ActiveX Component cannot be created

所以現在,情況變得更加復雜(我現在也很困惑)因為當我通過提升的命令提示符運行命令時代碼似乎工作。

所以我有兩個主要問題:

  1. 我是否在自定義操作安裝程序中正確運行命令?
  2. 為什么命令通過提升的命令提示符工作(當我認為 MSI無論如何都以提升模式運行時?

如果需要,我可以發布更多代碼。

好吧基本上,我自己解決了這個問題。

不需要使用RegAsm來注冊DLL。

我的兩個Shims正在Install方法中運行的Custom Action安裝程序中注冊。

我基本上運行RegSvr32將兩個 RegSvr32 注冊到系統上

另外,我擺脫了后期綁定。 CreateObject調用替換為:

  • 導入外部DLL作為參考
  • 用早期綁定替換Late binding(基本上使用該DLL的命名空間)

在成功編譯32位目標平台MSI之后,我能夠在x64 Outlook和x86 Outlook上安裝它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM