编辑 5/11/2013:这个问题最初询问如何使用 .NET 中的代码以编程方式注册 COM 对象,而无需使用 REGASM。Yahia 的回答涵盖了如何以编程方式注册 DLL 和 EXE。
原始问题:目前,我们有一个批处理脚本,当设置默认版本(使用 regasm 并添加注册表项)时,我们从 UI 调用以在 COM 中注册/取消注册我们的软件。我们不再希望使用批处理脚本,因为我们遇到了一个问题,如果脚本失败,程序不会意识到失败。有几种方法可以解决这个问题,但我不喜欢在不需要时从代码中调用批处理脚本的想法,所以我想切换到使用托管代码向 COM 注册我们的软件。
假设有可能,您如何从 C# 注册/注销 COM 对象?谷歌搜索只能从安装程序包中找到执行此操作的方法,或者告诉我使用 regasm,但我找不到任何有关如何以编程方式执行此操作的信息,或者是否有可能。
提前感谢您对此提供的任何帮助。
编辑 5/10/2013:看起来将 EXE 注册为 COM 对象与注册 DLL 不同。.NET 中是否有编程方式(PInvoke 很好)将 EXE 注册为 COM 对象(在 32 位注册表中)?这就是我们目前在脚本中的做法,app 和 REGCMD vars 只是简写:
set app=%PathToTheExecutable%
set REGCMD=%PathTo32BitRegExe%
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\regasm" /tlb /codebase %app%
%REGCMD% ADD HKCR\CLSID\{app-guid}\LocalServer32 /ve /t REG_SZ /d %app% /f
%REGCMD% DELETE HKCR\CLSID\{app-guid}\InprocServer32 /f
基本上我们在可执行文件上运行 regasm,然后将我们的 exe 添加为 LocalServer32 并删除将我们关联为 InprocServer 的条目。是否可以以编程方式执行此操作而无需从代码中调用 regasm?