问题标签 [regasm]

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 投票
3 回答
22677 浏览

c# - 从 VC++ 通过 COM 实例化 C# 对象的类未注册错误

在 VC++ 项目中,我试图创建 C# 项目中包含的 C# 类的实例(通过 COM)。

事实

  • C# 和 C++ 项目均使用 .NET 4.0 编译
  • 正在使用regasm /codebase "CSharpProjectName.dll" " 注册 C# .dll,并且 Windows 命令提示符报告“类型注册成功。”
  • 在 C++ 项目中,我尝试在 C# 项目中创建一个类的实例,但我得到一个0x80040154 的 HRESULT - 类未注册

这是我尝试从 C# .dll 创建 .NET 对象实例的示例。我试图实例化的具体类称为 Employee,为了简单地提出我的问题,它实现了 IPerson 接口:

为什么即使我使用“regasm /codebase”注册了 c# .dll 并确认注册表中存在该键,我也会收到“类未注册”错误?

任何帮助将不胜感激。谢谢!

0 投票
1 回答
13138 浏览

c# - RegAsm dll 没有注册类型

我正在尝试使用 RegAsm 注册一个 .dll。它是一个 .NET 2.0 dll。所有类都是公开的,并且 ComVisible 是真的。我仍然收到 RA0000 : No types were registered 错误。下面是代码和汇编信息。任何帮助都会很棒,谢谢!

STARTelnet.cs

装配信息.cs

0 投票
1 回答
3070 浏览

.net - RegAsm dll .net2.0 到 .net4.0

我有一个使用 .Net2.0 的 regasm 注册良好的 dll,但是在尝试使用 .NET4.0 regasm 注册时,我收到错误“无法加载文件或程序集' FILENAMEHERE '或其依赖项之一。操作不是支持。(来自 HRESULT 的异常:0x8013515 代码和程序集如下

STARTelnet.cs

装配信息.cs

0 投票
1 回答
2095 浏览

com - 为什么 Regasm 将 ProgId 放入 HKEY_CURRENT_USER?

我有两个我希望(Wix)安装我的软件的虚拟机。一个是 Windows XP SP2,另一个是 Windows XP SP1。他们都不使用域,并且他们都拥有具有管理员权限的本地用户 Administrator。

运行 RegAsm.exe 以在装有 SP3 的机器上注册 MyApp.dll 将我的 ProgId 放入文件夹中:

HKEY_CLASSES_ROOT\MyAppProgId

HKEY_LOCAL_MACHINE\Software\Classes\MyAppProgId

而在 SP2 机器上运行它会将它放在文件夹中:

HKEY_CLASSES_ROOT\MyAppProgId

HKEY_CURRENT_USER\Software\Classes\MyAppProgId

我在尝试从服务加载 MyApp.dll 时发现了这一点。从 RegAsm.exe 和 Heat.exe 生成的注册表文件似乎都在更新 HKEY_CLASSES_ROOT。

有谁知道这可能是什么原因?

编辑:我最终通过直接写入 HKEY_LOCAL_MACHINE 而不是 HKCR 来解决这个问题 - 这涉及手动编辑生成的 .reg 文件或 .wxs 文件。

0 投票
1 回答
9129 浏览

c# - RegAsm 的真正作用是什么?文件复制到哪里?

我们有一个基于 spicIE 的 IE 插件,目的是连接一些外部设备。

为了连接到这些外部设备,另一家公司开发了他们的令牌和 DLL。我们需要一些 ActiveX 和 DLL 来通过令牌进行身份验证。

问题是我们为 IE 开发的插件,最后有一个 install.bat 文件,它运行 RegAsm 并注册 DLL,然后在 IE 中可以查看该插件(或其更改)。

从 IE 运行插件时,我们的代码找不到一些 DLL,需要进行身份验证(将其命名为 x.dll)。注册的DLL复制到哪里?真的是抄的吗?我需要在我的插件的 DLL 所在的文件夹中有 x.dll。

0 投票
1 回答
242 浏览

c++ - 一个 C++ 客户端无法加载我们新注册的 COM 注册的 .NET .dll,另一个可以正常工作

我们有一个客户通过 COM 访问的旧 C/C++ .dll。

我们已经尝试用 i .NET 编写的新 .dll 替换旧的 .dll。

客户无法重新编译他们的客户端,因此旧的 .dll 可以简单地通过 COM 取消注册/注册新(使用 regsvr32 / regasm)替换,这一点很重要。

我们相信我们已经构建了具有与旧 COM 接口相同的 COM 接口的 .NET .dll;GUID、名称、dispid 等都匹配。我们已经通过编写自己的 C++ 测试应用程序验证了这一点,当我们取消注册旧的 .dll / 注册新的 .dll 时,它会继续工作。

问题是客户的客户端无法启动。

奇怪的是,如果我们保留旧的 .dll 注册(例如,两个 .dll 都已注册)它可以工作;客户的应用程序启动并调用我们新的 .dll 中的方法。但是,一旦我们取消注册旧的 .dll,应用程序就无法再次启动。

我们尝试了不同的方法来注册新的.dll;将 regasm 与 /codebase 选项、/tbl 等一起使用。

如果我使用 OLE/COM 查看器进行检查,我可以看到新旧 .dll 之间的一些细微差别,例如类型库“名称”不同。但我想既然我们自己的 C++ 测试客户端可以与任何一个 .dll 一起使用,那么 COM 接口是否足够相似?

请问,有人知道吗?一个 C++ 客户端如何加载我们的新 .dll 而另一个失败?如果我们让旧的 .dll 与新的 .dll 并行注册,为什么两者都可以工作?有什么解释为什么两个 C++ 客户端的行为不同吗?


更新:客户端中的错误消息说:

“运行时失败:CLSIDFromProgID。检查 [myDll].dll 是否已注册。”

亲切的问候 PT

0 投票
1 回答
752 浏览

com - 在 WiX 中使用 .reg 文件注册 DLL

问题的背景

我目前正在尝试整合一种分发我正在处理的新项目的方法,该项目需要在用户系统上注册一个 COM 公开的 .NET DLL,因为我是 WiX 的新手并正在迁移到它为此,我试图让事情尽可能简单。

问题

我的 DLL 注册的最大问题是 regasm 将 InProcServer32 键的默认值设置为“mscoree.dll”,但我的 DLL 似乎只能在使用它的完整路径时被实例化,例如“C:\Windows\ SysWow64\mscoree.dll"

目前我在我的安装项目中有一个自定义操作(我想放弃使用 WiX),它将调用 SearchPath API 来查找 mscoree.dll 的完整路径并用完整路径覆盖默认值,以便 DLL 可以实例化没有任何问题。

建议的解决方案/问题

由于我是 WiX 的新手,所以我有准备一个 .reg 文件的想法,该文件将包含进入 CLSID 树的所有必要信息,然后让 WiX 以某种方式执行该文件。

我的问题是:

  1. 以这种方式注册 DLL 是否存在任何固有缺陷?
  2. 由于我试图在这里找到解决方法的主要原因是 mscoree.dll 问题,在 WiX 中是否有任何本地方法可以做到这一点?
0 投票
1 回答
961 浏览

.net - 我可以使用 .Net4 RegAsm.exe 执行 .Net2 dll 的 RegAsm 吗?

我可以使用 .Net4 RegAsm.exe 对 .NET 2 dll 执行 RegAsm 吗?
我的机器上只安装了 .NET 4,我需要对 .NET 2 文件执行 RegAsm。

0 投票
1 回答
211 浏览

c# - 如何确定我的 DLL 是否正在注册或执行?

我有一个在 C# VS2010 .NET4 中开发的 IE 插件。似乎当 DLL 被注册(即安装)时,它会执行主构造函数,并且从那里有很多在那个时间点没有业务运行的代码。有没有办法可以确定 DLL 是否正在注册与实际执行的过程中,这样我就可以避免执行此代码?

它是通过 RegAsm 注册的

提前致谢!

0 投票
2 回答
3517 浏览

regasm - regasm 注册表错误

我输入这个:

regasm COMTest.dll /tlb:COMTest.tlb /codebase COMTest

我收到以下错误:

注册导出的类型库时出错:访问 OLE 注册表时出错。(来自 HRESULT 的异常:0x8002801C (TYPE_E_REGISTRYACCESS))

这是什么意思,我该如何解决?