问题标签 [dllregistration]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1268 浏览

.net - Delphi 7 - 免注册 COM 激活

我有一个 Delphi 客户端 (exe) 和 .NET COM dll,我试图在不需要注册 dll 的情况下运行它们。我已按照此处的步骤进行操作,并且我的 Delphi 客户端可以正常编译。但是,我不是 Delphi 专家,我无法弄清楚如何在 Deplhi 中使用该对象。以链接到的 Skype4COM.dll 示例为例,我将如何从 Delphi 7 访问 dll 及其方法?提前致谢。

0 投票
1 回答
75043 浏览

dll - 尝试注册 dll,但出现错误 DllRegisterServer entry point was not found

我有一个 .net 程序集 dll,我正在尝试使用 regsvr32 进行注册,但出现以下错误:

“已加载 dll 但未找到 DllRegisterServer 入口点”

在注册其他 dll 时也出现此错误。

0 投票
2 回答
58786 浏览

windows-server-2008-r2 - 如何在 Windows 2008 R2 上注册 32 位 .DLL COM+ 应用程序

我已经阅读了所有类似的问题,但没有找到我的确切问题的答案。我已经尝试了所有类似的建议。

我被迫从 Windows Server 2003 环境迁移到运行 IIS 7.5 的 Windows Server 2008 R2 环境。我有一个在 32 位 DLL 中调用 COM 对象的 Web 应用程序。COM 对象是从 VB6 创建的。这是我迄今为止所做的:

  1. 我在我的 IIS 应用程序池上启用了 32 位。
  2. 我已经使用 C:/windows/syswow64/regsvr32.exe 注册了 .DLL 及其依赖的 .DLL - 注册成功。
  3. 我已经使用 C:/windows/syswow64/regedit 在注册表中验证了 .DLL 及其组件
  4. 我在组件服务中创建了一个 COM+ 对象(使用 syswow64/dcomcnfg)并启动了它们。
  5. 我创建了一个角色“用户”并将组“每个人”添加到其中。

当我运行我的应用程序时,网页挂起。我可以在 COM 对象的日志文件中找到以下错误:

ActiveX 组件无法创建对象错误:[429]:CDataAdministrator::OpenCatalog

我已经比较了新服务器和旧服务器之间的设置。我注意到的一件事是,在旧服务器上,DataAdministrator 对象 (DataAdministrator.CDataAdministrator) 列在 DCOM Config 的扩展下,但在新服务器上却没有。而且我似乎无法让它出现在那里。

我在事件历史记录或 IIS Web 日志中没有错误。在我看来,一切都已注册,但它不会运行。我可以在我指定的帐户下运行的任务管理器中看到一个 DLLHOST.EXE*32。

我在这里不知所措....帮助?

0 投票
1 回答
639 浏览

dllregistration - dll 2003 80040005 错误寄存器

我有一个 DLL(用 VB6.. 编写)。它在大多数机器和安装上都可以正常注册和运行。然而,一种安装是 T/S(终端服务器),运行 Server 2003/R2/SP2。我收到以下消息失败:

C:\Program files\ApplicationPath\ModulesPath\dllname.DLL 中的 DllRegisterServer 失败。返回码是:0x80004005

我已确保该路径具有模块及其依赖项所在的目录,我已确保以管理员身份运行 CMD 提示符,并未选中“以受限访问权限运行此程序”复选框。

我运行了depends.exe,它说缺少IESHIMS.DLL 和WER.DLL,但它们在另一个2003 Svr/R2/SP2 盒子上也不见了,它在那里注册并运行良好。

有人对在哪里寻找什么有任何想法吗?我还花了一些时间比较工作服务器和非工作服务器之间的文件夹权限、文件内容和版本等。

0 投票
1 回答
1958 浏览

visual-studio-2010 - 错误:file.OCX 的并排配置信息包含错误。应用程序启动失败

尝试在特定机器上注册 ocx 时出现以下错误。(Windows XP 32 位)

错误:“file.OCX”的并排配置信息包含错误。此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题 (14001)。

但它在我的 Windows7 32 位和另一台 Windows7 64 位机器上运行良好。

除了操作系统之外,我能看到的唯一区别是在它工作的两台机器上,我们安装了 Delphi 2009 和 Microsoft Visual Studio。(从我读到的 Visual Studio 可能与它有关。)

我如何才能让这个 ocx 在没有 Microsoft Visual Studio 的机器上正确注册?

谢谢

附言

如果有帮助,清单版本是 1.0(在 ocx 文件中)。

这是清单

0 投票
3 回答
11643 浏览

com - COM 注册失败:“自动化错误:系统找不到指定的文件”,将 dll 安装到 tlb 文件以外的其他文件夹时

我们有一个用 VB.NET 开发的 COM 组件(我们称之为 MyLib),供我们的 Access 应用程序(我们称之为 MyApp)使用。为此,我们需要使用生成的 MyLib.dll 和 MyLib.tlb 文件进行 COM 注册。当我将这两个文件安装到我们的 MyApp 文件夹中时,一切正常,COM 函数被正确调用。但是,当我将 dll 安装到一个公共文件夹时,我在标题中提到了一个错误 - 我这样做的原因是因为我们希望允许在同一台机器上安装不同版本的 MyApp。所以如果 COM 组件没有改变,我们当然希望在这些不同的版本之间共享它,让 Windows 来做引用计数。

我不确定应该将 MyLib.tlb 文件放在 MyApp 的安装文件夹中,还是与 MyLib.dll 相同的公共文件夹中。但无论如何,我尝试了两个位置,它们都给出了相同的错误。我尝试比较将 MyLib.* 放入 MyApp 文件夹的情况和将 MyLib.dll 放入公共文件夹的情况之间的注册表文件。除了我试图在 HKCR\Wow6432nodes\CLSID{MYCLSID}\InprocServer32 下注册的类的 CodeBase 之外,我看不到任何区别。我不明白的另一件事是在这两种情况下,在 HKCR\Wow6432nodes\CLSID{MYCLSID} 下都没有名为 TypeLib 的子键,

我不完全了解 COM 参考如何用于 Access 应用程序,所以如果我错了,请纠正我。谁能告诉我我做错了什么?注册共享 COM dll 的正确方法是什么(是否将 dll 和 tlb 都放入共享文件夹)?谢谢!

更新:

关于 COM 注册,我使用 WIX 创建 Windows 安装程序和 heat.exe 从 dll 和 tlb 文件中获取信息。生成的文件包括Class、ProgID、TypeLib 和Registry 标签的信息。正如我所提到的,从 WIX 配置的角度来看,我的两种情况之间的唯一区别是我放置 MyLib.dll 文件的位置(我假设将 MyLib.tlb 文件放在 MyApp 安装文件夹中是正确的方法,再次,请更正如果我错了),当我将 dll 和 tlb 文件都放入应用程序的安装文件夹时,它确实有效。这是注册后的一些注册表结构

首先我有 HKCR\CLSID\{MYCLSIDs},它们中的每一个都代表我的一个 COM 类。在名为“InprocServer32”的子项中,我有 Assembly、Class、CodeBase、RuntimeVersion、threadingModel。CodeBase要么是普通文件夹(不工作)要么是MyApp的安装文件夹(工作),这是我放置dll的不同位置。我认为 {MYCLSIDs} 下会有另一个子键 TypeLib,因为 Access 只看到 TypeLib,我认为应该有一些从 TypeLib 到实际 dll 的链接,但是,在这两种情况下,这个子键都丢失了,但在第二种情况它仍然有效。它有问题吗?

其次我有 HKLM\Software\Classes\CLSID\{MYCLSIDs},这个键的结构和上面描述的一样。

第三,HKCR\{MYPROGIDs},这些只是我班级的 ProgID

第四,HKCR\Typelib\{LibID},包含来自tlb文件的信息,这个ID来自COM组件项目的Assembly GUID。

最后是 HKEY_CLASSES_ROOT\Interface\{InterfaceID},有一个名为 ProxyStubClsid32 的子键,其值为 {00020424-0000-0000-C000-000000000046},一个名为 TypeLib 的子键,其值为我的 LibID。

似乎唯一的区别是第一项中的 CodeBase(我可能是错的,但这就是我所看到的)。如果您发现任何问题,请告诉我。谢谢!

第二次更新:

将 MyLib.dll 安装到共享文件夹后,COM 调用失败。但是,如果我将 SHARED_FOLDER\MyLib.dll 的所有 CodeBase 值替换为 INSTALLDIR\MyLib.dll,并将 MyLib.dll 复制到 INSTALLDIR,它实际上可以工作。反之亦然,在我将 MyLib.dll 安装到 INSTALLDIR 后(在这种情况下 COM 正在工作),我将 CodeBase 值从 INSTALLDIR\MyLib.dll 更改为 SHARED_FOLDER\MyLib.dll,并复制到 SHARED_FOLDER,这次它失败了。所以看来,正是安装位置的问题,和我对COM的理解相反。而且我认为 SHARED_FOLDER 没有权限问题(我可能是错的),因为它位于我的安装程序创建的文件夹中。

0 投票
1 回答
382 浏览

com - WIX:将 COM dll 安装到另一个文件夹时 COM 注册失败

我正在使用热量来收集 COM dll 和 tlb 文件(我们称它们为 MyLib.*,在 VB.NET 中开发)来进行 COM 注册。当我将 MyLib.dll 和 MyLib.tlb 安装到应用程序的安装文件夹(即 INSTALLDIR)中时,一切正常。但是,由于我们想让我们的软件的不同版本可以安装在同一台机器上,并且如果他们使用相同版本的 COM 组件,那么只有一个 dll 副本(我认为我们的每个版本的 SW 应该有自己的tlb,如果我错了,请纠正我)应该安装,我们现在想将 MyLib.dll 安装到另一个文件夹中,特别是 PROGRAM_FILES\Common Files\SHARED_FOLDER_NAME,所以现在如果我们的一个版本的软件被卸载,MyLib.dll 将不会被删除,仍然可以被其他版本使用。

但是问题来了:在我将此dll安装到另一个文件夹后,我的COM注册根本无法工作,并且它一直说在我调用COM函数时找不到指定的文件,这表明注册失败。在 WIX 安装程序项目中,除了 MyLib.dll 的这个文件夹之外,一切都相同。

这是安装后的注册表结构:

首先我有 HKCR\CLSID{MYCLSIDs},它们中的每一个都代表我的一个 COM 类。在名为“InprocServer32”的子项中,我有 Assembly、Class、CodeBase、RuntimeVersion、threadingModel。CodeBase要么是普通文件夹(不工作)要么是MyApp的安装文件夹(工作),这是我放置dll的不同位置。我认为 {MYCLSIDs} 下会有另一个子键 TypeLib,因为 Access 只看到 TypeLib,我认为应该有一些从 TypeLib 到实际 dll 的链接,但是,在这两种情况下,这个子键都丢失了,但在第二种情况它仍然有效。它有问题吗?

其次我有 HKLM\Software\Classes\CLSID{MYCLSIDs},这些键的结构当然和上面描述的一样。

第三,HKCR{MYPROGIDs},这些只是我班级的 ProgID

第四,HKCR\Typelib{LibID},包含来自tlb文件的信息,这个ID来自COM组件项目的Assembly GUID。

最后是 HKEY_CLASSES_ROOT\Interface{InterfaceID},有一个名为 ProxyStubClsid32 的子键,其值为 {00020424-0000-0000-C000-000000000046},一个名为 TypeLib 的子键,其值为我的 LibID。

正如我所提到的,唯一的区别是 CodeBase,它存储了 MyLib.dll 所在的位置。为了验证这一点,我做了两个测试:将 MyLib.dll 安装到共享文件夹后,COM 调用失败。但是,如果我将 SHARED_FOLDER\MyLib.dll 的所有 CodeBase 值替换为 INSTALLDIR\MyLib.dll,并将 MyLib.dll 复制到 INSTALLDIR,它实际上可以工作。反之亦然,在我将 MyLib.dll 安装到 INSTALLDIR 后(在这种情况下 COM 正在工作),我将 CodeBase 值从 INSTALLDIR\MyLib.dll 更改为 SHARED_FOLDER\MyLib.dll,并复制到 SHARED_FOLDER,这次它失败了。所以看来,正是安装位置的问题,和我对COM的理解相反。而且我认为 SHARED_FOLDER 没有权限问题(我可能是错的),因为它位于我的安装程序创建的文件夹中。

请帮忙,谢谢!

0 投票
1 回答
784 浏览

activex - installshield light ActiveX dll 未注册

我正在使用带有免费版 Installshield 的 Visual Studio 2010。该应用程序包括一个从 Excel 调用的 ActiveX 组件。在项目构建属性页面上选中“注册 COM 互操作”选项。当我在 XP 机器上运行安装时,dll 没有被注册。如果我手动运行 regasm /tlb: 命令,则应用程序可以工作。

问题: 1. 如何通过installshield 日志文件验证注册是否运行?2. 如果注册失败,日志会显示什么样的错误信息?2. installshield 要求 dll 是强命名的吗?(不是) 3. 有没有其他的故障排除建议?

提前致谢,

居里

0 投票
1 回答
339 浏览

dll - 如何集中 VB6 dll 引用的 .net dll(com 互操作)

VB6 程序员给了我一个要求(是的,它们仍然存在)。存在使用 vb6 dll 的 vb6 应用程序,此 dll 现在使用 .net dll,而后者又使用另一个 .net dll。现在我的要求是 .net dll 应该像 vb dll 一样工作,即一旦注册了 vb6 dll,它就可以被其他应用程序使用,并且在推出时不需要包含(所以我被告知)。有没有办法放置我的 .net dll 以便其他 vb6 应用程序可以使用它。从我所见,这仅在我的 .net dll 与我的 vb6 exe 位于同一文件夹中时才有效。

我已阅读此COM 程序如何定位为 COM 互操作注册的 .NET DLL?

谢谢你

0 投票
1 回答
1615 浏览

.net - 使用 Inno Setup 进行 Com+ 互操作注册

我使用 Inno Setup 来创建我的设置。一切正常,但我遇到了问题:如何注册 .NET DLL 以使其可被 COM+ 访问。众所周知,.NET 带来RegSvcs.exe了这一点,所以我检查了 Inno Setup 文档,只发现 gacinstall 用于程序集注册,但不用于 COM+ 交互。所以我在[Run]部分添加了这个

但是通过测试设置,这一行就被跳过了。该 DLL 在之前的部分中被复制到目标[Files]并且可用。设置后,我也可以从命令行手动运行 RegSvcs.exe,而不会出现问题。