近期对RTX进行二次开发,功能也很简单就是获取本地登录账号在VS上已经成功但是部署到IIS上报错,报错信息如下“检索 COM 类工厂中 CLSID 为 {5EEEA87D-160E-4A2D-8427-B6C333FEDA4D} 的组件时失败,原因是出现以下错误: 80040154。”
我的代码
RTXAPI api = new RTXAPI();
RTXCRoot root = (RTXCRoot)api.GetObject("KernalRoot");
string account = root.account ;
请各位大神帮忙解决下。谢谢
1.确认是否注册成功
2.确认目标平台是否是X86
请问是怎么注册的?X86 网站发布的时候需要修改平台X86?但是我改了之后就报错
@华心: 需要regsvr32注册你的dll或ocx
一是要用 regsvr32 注册 com 组件,二是如果你的 com 组件是 32 位的,需要在 iis 中将应用程序池修改成为 x86。
你好我已经注册了,也已经将IIS程序池改为X86,但是报
未将对象引用设置到对象的实例
RTXAPI api = new RTXAPI();
RTXCRoot root = (RTXCRoot)api.GetObject("KernalRoot");
this.ASPxTextBox1.Text = root.Account;
看了下root为null 但是本地VS调试能取到值
@华心: 用 5EEEA87D-160E-4A2D-8427-B6C333FEDA4D 或者 KernalRoot 去注册表搜索,把搜索到的项都贴出来。
@Launcher: 我现在权限贴图贴不了,我搜了下5EEEA87D-160E-4A2D-8427-B6C333FEDA4D总共有4个,1.RTXAX.AXAPI.1下的CLSID,2.RTXClient.RTXAPI下的CLSID,3.RTXClient.RTXAPI.2下的CLSID,4.{5EEEA87D-160E-4A2D-8427-B6C333FEDA4D}就这4个。
@华心: 你在服务器上打开 exel,使用 vba 的 CreateObject 函数测试下能否创建对象。另外你要告诉我 api.GetObject("KernalRoot") 这句代码创建的是哪个 COM 对象?
@Launcher: 服务器就是我本机,我IIS是在本地发布。VS运行没问题可以获取到账号,但是IIS发布之后就报错。
@华心: 把应用程序池标识修改为“LocalSystem”.
@Launcher: 没报错了,但是root.Account是空的,检测不到RTX的登录账号,但是我RTX是登着的
@华心: 你的 RTX 是不是进程外 COM 组件?
@Launcher: 不是啊,是进程中的。
@华心: 你会用 VBA 或 C++ 写 COM 客户端程序吗?
@Launcher: 这个真不会呢。。
@Launcher: 会不会跟IIS的版本有关系?
@华心: 一般来说不会。你要会用 VBA 写一段创建组件并获取“account”的代码就比较好了,类似如下:
Dim xlApp As Object '
定义存放引用对象的变量。
Set xlApp = CreateObject("excel.application")
xlApp.Visible = True
xlApp.Quit
Set xlApp = Nothing
或者你能把这个 RTX 的技术架构给描述清楚也行,毕竟你这个玩意儿不像 Office ,不是谁都要用的。
@Launcher: 对RTX的开发不是很了解,我是照着API写的,API是用VB写的
@华心: 是 VB,还是 VB.NET?
@Launcher: VB.NET
@华心: 那你调用的是托管程序集,你把方法 api.GetObject 的源码贴出来看看。
@Launcher: 这个是RTX组件里的源码
@华心: 源码在哪里?你逗我呢?