Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 64位应用程序的COM注册_C#_.net_Com_64 Bit_Registry - Fatal编程技术网

C# 64位应用程序的COM注册

C# 64位应用程序的COM注册,c#,.net,com,64-bit,registry,C#,.net,Com,64 Bit,Registry,我正在为使用第三方SDK的64位应用程序创建安装程序。此SDK需要COM注册,并且似乎有一些相互冲突的说明,因此我想了解以下方面的最佳实践: 为了实现无注册表激活(对于支持它们的COM DLL),我只需将它们放在同样包含互操作包装的应用程序文件夹中。这就是他们的指示 要使用剩余的COM DLL,它们有以下说明: LEADTOOLS Multimedia for.NET现在支持LEADTOOLS Multimedia COM对象的免注册激活(请注意,所有其他LEADTOOLS DirectShow

我正在为使用第三方SDK的64位应用程序创建安装程序。此SDK需要COM注册,并且似乎有一些相互冲突的说明,因此我想了解以下方面的最佳实践:

为了实现无注册表激活(对于支持它们的COM DLL),我只需将它们放在同样包含互操作包装的应用程序文件夹中。这就是他们的指示

要使用剩余的COM DLL,它们有以下说明:

LEADTOOLS Multimedia for.NET现在支持LEADTOOLS Multimedia COM对象的免注册激活(请注意,所有其他LEADTOOLS DirectShow筛选器和编解码器仍需要使用regsvr32注册)。重新分发所需的新文件包括:ltmm.manifest和ltmm19.dll(32位)或ltmm19x.dll(64位)(取决于应用程序的处理器体系结构)。为了使应用程序使用无注册表激活,请将文件安装到与Leadtools.Multimedia.dll相同的文件夹中

该工具包还为DSKernel2.dll(32位)和DSKernel2x.dll(64位)COM对象提供可选清单文件,以简化部署(几乎所有应用程序都需要DSKernel dll。可以选择重新分发的新文件包括:DSKernel2.manifest(32位)或DSKernel2x.manifest(64位),(取决于应用程序的处理器体系结构)。将这些文件安装到与DSKernel2.dll/DSKernel2x.dll相同的文件夹中,以便应用程序使用无注册表激活

***建议将x64运行时安装在windir\SYSWOW64文件夹而不是windir\System32文件夹中,因为某些开发环境(如VS8)不会导入放置在windir\System32文件夹中的引用,因为该文件夹是32位应用程序

因此,即使你忽略了上述背景,我的问题仍然存在:

有两个版本的
regsvr32
,一个在
Windows\System32
文件夹中,另一个在
Windows\SysWOW64
文件夹中。哪一个用于注册纯64位DLL

此外,在枚举系统文件夹时,
SpecialFolder
枚举的以下值似乎与直觉相反,对它们的MSDN描述并没有透露太多

Environment.SpecialFolder.System > Maps to Windows\System32
Environment.SpecialFolder.SystemX86 > Maps to Windows\SysWOW64

请注意,使用这些文件的应用程序的目标是
x64
,而不是
AnyCPU
,并且支持的最低操作系统必须是
Windows 7

,如果您想使用另一个具有免注册COM的组件,则必须引用刚刚放置在应用程序文件夹中的程序集。simple将它们放在那里是必要的,但还不够,因此您需要更改应用程序的清单,或创建一个依赖于隔离组件的清单

例如:


。这样,您就不必将所有VS项目或nmake文件更改为具有两组库引用,例如,您总是使用
user32
,而不是
user32
user64
,具体取决于目标系统。事后来看,在库名称中添加架构位可能是一个错误大约20年前。

特别是关于LEADTOOLS多媒体,当您构建.NET应用程序时,有两种类型的DLL:

    >P>核心工具包DLL,它是DirectShow和LeaveToels.MediaFoundation .DLL用于媒体基础的LeaveToel.MulediediaDLL。 这些核心dll包含主控件(捕获、转换和播放)以及其他几个辅助对象,它们不需要注册(使用RegSvr32)。这些是.NET包装器/互操作(到LTMM##.dll)对于我们的本机COM库。请注意,DirectShow和MediaFoundation都是使用COM实现的。因此,LEADTOOLS还创建了COM DLL。由于.NET不能以本机方式使用COM,因此我们创建了这些包装器,以便使用我们的工具更容易地编写.NET应用程序。您可以将它们注册到全局程序集缓存(GAC)中如果您愿意,但这不是必需的

  • 附加编解码器和过滤器,如H.264和H.265。 每个(COM)编解码器或筛选器通常都有自己的DLL,需要使用RegSvr32进行注册。对于这些编解码器和筛选器的64位和32位版本,我们建议您将这些DLL部署到SysWOW64文件夹,并从SysWOW64文件夹向RegSvr32.exe注册


这个问题没有任何意义。使用免注册激活的意义在于,您不再使用Regsvr32.exe。如果无法使用它,请与供应商联系以获得支持。@HansPassant:您尝试过与供应商联系,但迄今为止没有成功。说明中的前两点表示免注册激活(部署到应用程序文件夹),而最后一点似乎是针对开发环境(而不是部署)。此外,在部署到应用程序文件夹后,它们似乎需要手动注册其他组件,我不确定要使用哪个版本的regsvr32。Paulo Madeira的回答澄清了这一点。此时,我不确定是否需要为我自己的应用程序创建自定义清单。现在查看一下。Raheel:我已经发布了一个答案a关于COM注册问题,但想就“试图联系供应商,但迄今无效”发表评论。我搜索了我们的支持电子邮件、聊天会话和支持论坛,但没有找到您最近的任何信息。只有200到2000天的票证。您是否使用了其他名称?如果您发送了支持电子邮件,是否会收到自动回复,其中包含票证号?我不明白为什么此答案被否决。SDK确实出现了使用他们自己的清单文件。我将按照您的建议进一步研究为消费者应用程序创建清单。感谢您澄清回答核心问题的文件系统重定向程序