我已经写了一个c#.NET COM可调用包装器DLL。我用一个strondName签名并使用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 cscript.exe 24028 regopenkey hkcr \ mycompany.loggerControl
名称未找到所需的访问:读取 但是,此密钥存在于Regedit中。调用进程从提升的命令提示符运行。如果是安全问题,不应该错误是“访问被拒绝”而不是“未找到的名称”?

追踪此类COM控制注册错误的其他工具是什么?

有帮助吗?

解决方案

这里是几个故障排除的想法:

  1. 在尝试创建对象时识别正在返回的确切错误编号:

    在错误恢复下一个 Set Logger= CreateObject(“MyCompany.LoggerControl”)
    如果呃那么 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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top