标签: regasm

RegAsm.exe和regsvr32有什么区别?如何使用regsvr32生成tlb文件?

任何机构都可以告诉我regsvr32和RegAsm有什么区别?我的Dll在C#中,那么如何将类导入到c ++中呢?

c# c++ com regasm visual-c++

38
推荐指数
1
解决办法
3万
查看次数

使用Visual Studio安装项目自动注册和GAC COM Interop DLL

我已经为COM互操作创建了一个.NET程序集,它在我的开发机器上运行良好.我目前正试图弄清楚如何使用Visual Studio的"安装项目"将DLL部署到目标机器.如何使用VIsual Studio安装项目执行以下操作:

  • 注册装配(当前使用regasm).
    • 需要成功注册程序集,并且需要成功注册类型库(.tlb).
    • 这个答案建议废弃regasm自定义代码.我这是个好主意?如果是这样,该代码如何包含在安装项目中?
    • 这个答案建议在安装项目中使用/regfile命令,regasm然后使用注册表中的导入工具.这会有用吗?
  • 在GAC中安装组件(当前使用gacutil)
    • 我知道"目标机器上的文件系统"中的"全局程序集缓存文件夹".在安装项目中包含程序集时,我需要做些什么特别的事情吗?

任何其他建议或关注将不胜感激.

.net interop gac regasm setup-project

27
推荐指数
1
解决办法
3万
查看次数

RegAsm - /codebase选项何时适用?

我有一个用C#编写的COM可见DLL,我想在VB6应用程序中使用它.我有两个DLL的主要用例,我想知道该/codebase选项何时适用以及何时最好在GAC中注册.


用例:

  1. DLL将被加载到另一台开发人员PC上,并且需要在Project > References菜单下的VB6 IDE中访问

  2. 当VB6应用程序发布时,DLL将被加载到生产机器上


有关适当使用的任何信息/codebase都会有所帮助.

谢谢.

vb6 com dll comvisible regasm

18
推荐指数
1
解决办法
2万
查看次数

RegAsm怎么做才能覆盖32位和64位?

我有一个由C#编写的DLL文件,我的系统是Windows 7 64位.当我应用RegAsm时,它没有将注册表添加到64位路径,而只是将其添加到32位路径.

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" /register /codebase "C:\o.dll"
Run Code Online (Sandbox Code Playgroud)

然后,如果我在regedit.exe中检查我的GUID,我看到我只在32位注册表路径中有它: HKEY_CLASSES_ROOT\CLSID\{... my guid is found here ....}

代替 HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{... not found my guid ...}

因此,我有其他问题.任何人都可以建议发生了什么以及为什么它没有制作32位和64位注册表项?"

c# windows com regedit regasm

17
推荐指数
2
解决办法
1万
查看次数

注册没有管理员权限/ regasm的.Net COM DLL

最近,我在C#中编写了一个类库,用于Office应用程序,包括约70人使用的关键Access应用程序.对于具有管理员权限的用户,注册DLL很简单,但让DLL在其他计算机上运行是有问题的.

注册DLL以使用管理员权限

  • 在Visual Studio中构建DLL.确保在项目的" 应用程序"选项卡上选择了这些选项:
    • 输出类型:类库
    • 装配信息:使装配COM可见:已检查
  • 使用提升的命令提示符注册程序集:
    • RegAsm YourDll.dll /tlb /codebase
  • YourDll.tlb在VBA中添加引用:工具 - >引用
  • 验证您是否可以创建对象的实例

怎么了?

Regasm在这里做了几件事.首先,它创建了一个类型库(YourDLL.tlb),它提供有关DLL中的类的信息.其次,它将有关库的信息存储在注册表中,以便系统"知道"当您要求将类实例化为对象时的含义.

要查看Regasm添加的注册表项,可以使用以下/regfile参数运行它:

Regasm YourDLL.dll /codebase /regfile

(该/regfile选项对/tlb参数无效.)

如果该/codebase选项告诉Regasm包含有关YourDLL.dll磁盘位置的信息,这对于创建对象很重要.

如果您YourDLL.reg在文本编辑器中打开,您将看到Regasm添加到注册表的条目:条目HKEY_Classes_Root(实际上只是重定向到HKLM\Software\Classes).不幸的是,您需要管理员权限才能修改HKLM,因此这对我们的其他用户无效.

还有一些其他线程(例如,注册没有管理员权限的COM,注册COM DLL供VBA使用,注册DLL(ActiveX)用于非管理员用户,无法注册.NET COM DLL,COM Interop没有regasm)讨论问题,但他们的解决方案是复杂的(例如需要注册表重定向)或不完整(假设你已经知道至少一半的答案)或不适用于混合64/32位环境(例如Win64,Office32).

那么如何在没有管理权限的情况下注册在Visual Studio中创建的COM DLL,以便在当前用户的VBA 32和64位环境中使用?

.net registry dll vba regasm

17
推荐指数
2
解决办法
7298
查看次数

为什么regasm.exe使用错误的GUID注册我的c#程序集?

我有一个ac#assembly,我正在通过COM从Delphi(win32 native)应用程序调用它.

这适用于我测试过的所有机器,除了一台.

问题是Delphi应用程序在尝试创建COM对象时获得"Class not registered".

现在,当我查看下面的注册表时HKEY_CLASSES_ROOT\DelphiToCSharp\CLSID,列出的GUID与AssemblyInfo.cs中的程序集Guid不同.它应该是相同的 - 它在安装它的所有其他计算机上是相同的.

我试过了regasm /unregister delphitocsharp.dll,删除了注册表项.然后如果我这样做regasm delphitocsharp.dll,注册表键返回,但GUID与之前相同(即错误),Delphi仍然获得"Class not registered".

工作机器上的DelphiToCSharp.dll与非工作机器上的版本完全相同(通过md5验证).

我能想到的只是之前注册了一个旧版本的dll,并且仍然存在一些使该文件混乱的文件的残余.

我该如何修复或至少进一步诊断此问题?

.net c# delphi com regasm

11
推荐指数
1
解决办法
6140
查看次数

在Excel VBA中调用没有COM互操作管理权限的regasm

此处描述了在没有管理员权限的情况下调用regasm的解决方法:

COM Interop没有regasm

我正在尝试创建一个COM库,我的用户可以在没有管理员权限的情况下从Excel VBA部署和使用它.我喜欢regasm解决方法,因为似乎人们在使用Excel VBA中的免注册COM对象方面没有太大成功.我也希望早期绑定,以便我的用户可以从语法完成中受益.

但是,上述问题中接受的答案并未描述将汇编dll放在用户计算机上的位置.管理员权限是在GAC中安装程序集所必需的,所以我想知道在哪里可以放置dll文件.我假设应用程序的目录正在搜索任何引用的dll,但我不能将我的dll放在Excel的目录中而没有管理员权限.是否可以使用Excel客户端的变通方法?有没有其他方法从VBA调用COM对象而不需要管理员权限来首先部署它们?

com vba com-interop regasm excel-vba

11
推荐指数
2
解决办法
4231
查看次数

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

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

事实

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

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

    CSharpProjectName::IPersonPtr pPersonPtr;
    HRESULT hr = pPersonPtr.CreateInstance(CSharpProjectName::CLSID_Employee);
Run Code Online (Sandbox Code Playgroud)

即使我使用"regasm/codebase"注册c#.dll并确认注册表中存在密钥,为什么我会收到"未注册类"错误?

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

.net c# com regasm visual-c++

9
推荐指数
1
解决办法
2万
查看次数

COM程序如何找到为COM Interop注册的.NET DLL?

一个客户想要从VB6使用我们的.NET DLL.它们旨在支持反向互操作,所有工作都很好......除了:在两个不同的目录中有两个单独的VB6程序.似乎有必要做一个:

  1. 将.NET DLL复制到两个目录中,或
  2. 在GAC中安装.NET DLL

这是客户的观察,也得到了RegAsm文档的支持:

使用Regasm.exe注册程序集后,可以将其安装在全局程序集缓存中,以便可以从任何COM客户端激活它.如果程序集仅由单个应用程序激活,则可以将其放在该应用程序的目录中.

我对这一点感到困惑.

第一点困惑:

据我所知,COM运行时使用Prog ID/Class ID定位DLL.当我在类ID条目的注册表中查看时,我在CodeBase键中看到了.NET DLL的完整路径.为什么使用Prog ID/Class ID的COM程序无法使用CodeBase找到.NET DLL?

第二点困惑:

GAC特定于.NET.它如何参与解析COM引用?

gac com-interop regasm

8
推荐指数
1
解决办法
966
查看次数

注册使用VS C#2010创建的COM对象

我用C#昨天创建了一个COM对象,导致我的VS 2010项目的bin/release目录中有三个文件(comclass.dll,comclass.pdb和comclass.tlb).现在,当我在项目中构建解决方案时,VS会在开发PC上自动为我注册该类,我可以从Powershell访问COM对象及其方法.但是,当我将这三个文件复制到另一台机器并尝试使用regsvr32注册dll时,它告诉我

模块"comclass.dll"已加载但未找到入口点DllRegisterServer.

确保"comclass.dll"是有效的DLL或OCX文件,然后重试.

使用.tlb文件中regasm/tlb参数给我一个类似的消息.所以我有点难过.有谁知道我应该怎么从这里开始?

c# com dll regsvr32 regasm

8
推荐指数
1
解决办法
9349
查看次数