C# 是否可以在作为浏览器中的ActiveX控件运行的程序集中使用免注册COM?

C# 是否可以在作为浏览器中的ActiveX控件运行的程序集中使用免注册COM?,c#,.net,activex,manifest,regfreecom,C#,.net,Activex,Manifest,Regfreecom,我已经对此进行了一段时间的思考,现在我接近于得出结论,我正在尝试做的是不可能的,但我想给StackOverflow的员工一个机会,希望在转向另一种策略之前证明我是错的 我想做的事 我的项目是一个.NET程序集,它以ActiveX控件(控件a)的形式向COM公开,该控件将在浏览器中运行。它依赖于第三方ActiveX控件(控件B),我正试图通过控件a的免注册COM使用该控件 因此,所需的堆栈如下所示: Internet Explorer [COM] Ax控件A(我的控件) [Reg Free CO

我已经对此进行了一段时间的思考,现在我接近于得出结论,我正在尝试做的是不可能的,但我想给StackOverflow的员工一个机会,希望在转向另一种策略之前证明我是错的

我想做的事 我的项目是一个.NET程序集,它以ActiveX控件(控件a)的形式向COM公开,该控件将在浏览器中运行。它依赖于第三方ActiveX控件(控件B),我正试图通过控件a的免注册COM使用该控件

因此,所需的堆栈如下所示:


Internet Explorer
[COM]
Ax控件A(我的控件)
[Reg Free COM]
Ax控制B(第三方)


我为什么要这么做 我想使用免注册COM,因为与另一个使用控件B的应用程序的版本控制冲突,再加上控件B没有正确实现版本控制(存在两个具有相同GUID的不兼容版本)。无注册COM似乎是将控件B的两个版本彼此隔离的唯一可行方法

我不需要浏览器通过无注册COM调用我的控件(控件A),我只是计划使用正常的机制

我到目前为止所做的事情 考虑到浏览器是运行整个堆栈的最终应用程序,让用户为Internet Explorer添加清单文件既不实际也不可取,我的方法是将清单嵌入控件a,使其使用无注册COM调用控件B

我已经设法将清单嵌入到控件A中,并使用第三方工具验证它是否确实嵌入。为了简化测试,我将浏览器从等式中去掉,并从一个简单的C#forms应用程序中测试了无注册COM。然而,我似乎无法让免费注册的COM在那种环境下工作

出于测试目的,我为测试表单应用程序创建了一个清单,其中包含我嵌入到控件a中的信息,并且在该配置中,它可以在注册控件B的情况下工作,也可以不注册控件B的情况下工作。如果我的应用程序要在测试应用程序中运行,而不是在浏览器中运行,那就太好了。我做这个测试只是为了确认我嵌入的清单是正确的,我相信我已经确认了

不工作意味着什么 测试Windows窗体应用程序运行良好,并在注册控件B时显示控件A和(嵌套)控件B。但是,当我注销控件B并尝试依赖免注册COM时,应用程序立即抛出此错误(UFV=控件A):

我的问题

(1) 我找错树了吗?也就是说,甚至可以像我正在尝试的那样在堆栈的中间使用无注册的COM,还是必须将清单嵌入到EXE文件本身(或者在清单文件中)?< /P> (2) 如果无法做到这一点,为什么清单合并工具(MT.EXE)甚至允许您将清单嵌入DLL文件


(3) 如果可能的话,我是不是错过了一步?这样做有什么诀窍吗?

说“它不起作用”的话太多了。关注你做了什么,而不是结果。发布清单内容和构建步骤。也许你错过了“我到目前为止做了什么”的部分?
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Runtime.InteropServices.COMException
Stack:
   at System.Windows.Forms.AxHost.CreateInstance()
   at System.Windows.Forms.AxHost.GetOcxCreate()
   at System.Windows.Forms.AxHost.TransitionUpTo(Int32)
   at System.Windows.Forms.AxHost.CreateHandle()
   at System.Windows.Forms.Control.CreateControl(Boolean)
   at System.Windows.Forms.Control.CreateControl(Boolean)
   at System.Windows.Forms.AxHost.EndInit()
   at UniversalFileViewer.UFV.InitializeComponent()
   at UniversalFileViewer.UFV..ctor()
   at TestFormsProject.TestForm.InitializeComponent()
   at TestFormsProject.TestForm..ctor()
   at TestFormsProject.Program.Main()