如何解决.NET COM Callable Wrapper DLL的注册/使用问题?

时间:2012-03-08 19:02:33

标签: .net com ccw

我编写了一个C#.NET Com可调用包装器DLL。我使用StrongName对其进行了签名,并使用64位regasm.exe注册了codebase和typelib。使用64位OleViewer可以看到注册和所有控件的方法。但是,当我尝试使用64位\ Windows \ System32 \ cscript.exe:

中的控件时
  Set logger = CreateObject("MyCompany.LoggerControl")

这会产生错误:

  

Microsoft VBScript运行时错误:ActiveX组件无法创建对象:'MyCompany.LoggerControl'

使用Sysutils的ProcMon跟踪此情况,我发现:

  

1:41:44.8295486 PM   cscript.exe 24028 RegOpenKey HKCR \ MyCompany.LoggerControl
  名称未找到所需访问权限:阅读

但是,此密钥存在于Regedit中。调用进程从提升的命令提示符运行。如果这是一个安全问题,错误不应该是“拒绝访问”而不是“NAME NOT FOUND”吗?

有哪些其他工具可以跟踪此类COM控件注册错误?

1 个答案:

答案 0 :(得分:1)

以下是一些故障排除方法:

  1. 确定尝试创建对象时返回的确切错误号:

    On Error Resume Next
      设置logger = CreateObject(“MyCompany.LoggerControl”)
    如果是Err然后   WScript.Echo“错误#”&的Err.Number   WScript.Echo Err.Description   WScript.Quit 1 结束如果

  2. 查找此错误代码。例如,它是“访问被拒绝”还是其他一些错误?

  3. 创建一个C#可执行文件来调用您的对象,看它是否可以成功创建它。

  4. 确保您的DLL没有任何其他依赖项,以防止它被加载到脚本运行的目录中。您可以使用您运行脚本的目录中的depends.exe,或者您可以使用我最喜欢的穷人的regsvr32技术来尝试加载DLL。如果DLL由于依赖项而无法加载,您将收到一个错误对话框,告诉您它无法找到另一个DLL或加载其中一个依赖项。如果它可以加载DLL确定它会说它已成功注册它。

    C:\ PathToVbs> regsvr32 C:\ PathToYourDLL \ YourDLL.dll