Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IE和activeX应用程序的清单问题_C#_Activex_Internet Explorer_Manifest_Side By Side - Fatal编程技术网

C# IE和activeX应用程序的清单问题

C# IE和activeX应用程序的清单问题,c#,activex,internet-explorer,manifest,side-by-side,C#,Activex,Internet Explorer,Manifest,Side By Side,我面临以下配置: IE加载C++加载工具(加载程序),加载C语言的COM ActiveX(执行器),使用反射启动C.Cu'UI应用程序(主应用程序),使用一些传统的C++ COM DLL。 我试图避免注册这些传统的C++ COM(我想使用清单)。 但是没有成功 是否有方法通过指向这些DLL的“文件”部分为ActiveX指定清单 我试图为IE创建清单,但没有成功,将Native.manifest放在遗留文件所在的目录中,也没有成功 似乎XBAP而不是loader和executor应该解决这个问题。

我面临以下配置: IE加载C++加载工具(加载程序),加载C语言的COM ActiveX(执行器),使用反射启动C.Cu'UI应用程序(主应用程序),使用一些传统的C++ COM DLL。 <>我试图避免注册这些传统的C++ COM(我想使用清单)。 但是没有成功

是否有方法通过指向这些DLL的“文件”部分为ActiveX指定清单

我试图为IE创建清单,但没有成功,将Native.manifest放在遗留文件所在的目录中,也没有成功

似乎XBAP而不是loader和executor应该解决这个问题。 但是,如何解决当前架构中的问题


谢谢你没有IE,所以你不应该为它创建清单。如果你要将COM注册数据放入清单中,你必须告诉系统查看该清单中的注册数据。因为你不控制主机应用程序,所以方法是使用,尤其是CreateActxo正确的清单,然后在该线程上激活EACTCTTX。然后,您可以根据需要协同创建实例,然后使用DeactivateACTTX/ReleaseACTX


XBAP可能为您工作的原因是,由于它是一个单独的可执行文件,所以清单由系统自动激活,并在进程启动时绑定到您的XBAP进程。当您在IE中托管时,您必须做更多的工作,因为您无法控制进程。

您没有IE,因此不应该创建清单如果要将COM注册数据放入清单中,则必须告诉系统查看该清单中的注册数据。由于您不控制主机应用程序,因此执行此操作的方法是使用CreateActX,尤其是指向正确清单的CreateActX,然后在该线程上激活eActTX。您可以然后,根据您的意愿创建一个CoCreateInstance,然后使用DeactivateActTX/ReleaseActCtx进行后续操作


XBAP可能为您工作的原因是,由于它是一个单独的可执行文件,系统会自动激活清单,并在进程启动时绑定到您的XBAP进程。当您在IE中托管时,您必须做更多的工作,因为您无法控制进程。

如果您创建自己的进程并托管web浏览器控件,您可以向应用程序提供一个包含COM信息的清单文件。正如您所建议的,它可以包含每个遗留COM组件的条目(带有progid和comClass信息等)。然后,当承载的浏览器控件中加载的javascript执行“new ActiveXObject()”调用时,注册表中的COM(并排)加载程序被激活,它将使用清单文件解析它需要的内容

您可以在不到15分钟的时间内找到此解决方案,只需进行概念验证:只需创建一个嵌入webbrowser控件的新.net应用程序,使用javascript编写测试html页面以创建遗留组件,并在COM组件中调用一个方法,最后使用leg条目为exe创建.manifest文件acy组件。只需将web浏览器控件属性设置为测试html文件。不要忘记注销COM组件并使用.manifest文件更新exe

文件清单条目的示例如下:

<file name="mycom.dll">
    <typelib tlbid="<YOUR TYPELIB ID>" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
    <comClass clsid="<YOUR COCLASS ID>" threadingModel="Apartment" tlbid="<YOUR TYPELIB ID>" progid="mycom.class.1" description="mycom.class" />
</file>

有关文件清单的更多信息,请参见:


如果您创建自己的进程并托管web浏览器控件,则可以向应用程序提供包含COM信息的清单文件。正如您所建议的,它可以包含每个遗留COM组件的条目(带有progid和comClass信息等)。然后,当宿主浏览器控件中加载的javascript执行“new ActiveXObject()”调用时,将激活无注册表COM(并排)加载程序,它将使用清单文件解析所需的内容

您可以在不到15分钟的时间内找到此解决方案,只需进行概念验证:只需创建一个嵌入webbrowser控件的新.net应用程序,使用javascript编写测试html页面以创建遗留组件,并在COM组件中调用一个方法,最后使用leg条目为exe创建.manifest文件acy组件。只需将web浏览器控件属性设置为测试html文件。不要忘记注销COM组件并使用.manifest文件更新exe

文件清单条目的示例如下:

<file name="mycom.dll">
    <typelib tlbid="<YOUR TYPELIB ID>" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" />
    <comClass clsid="<YOUR COCLASS ID>" threadingModel="Apartment" tlbid="<YOUR TYPELIB ID>" progid="mycom.class.1" description="mycom.class" />
</file>

有关文件清单的更多信息,请参见: