|
[软件故障] 检索 COM 类工厂中 CLSID 为 {28E68F9A-8D75-11D1-8DC3-3C302A000000} 的组件时失败
现象:在Windows Server 2008 R2 X64系统下,C#通过OPC取数,用VS2005的调试器调试时数显示正常,但配置IIS后在IE、Chrome等浏览器中使用IP访问时,则报错,提示
System.Runtime.InteropServices.COMException (0x80040154): 检索 COM 类工厂中 CLSID 为 {28E68F9A-8D75-11D1-8DC3-3C302A000000} 的组件时失败,原因是出现以下错误: 80040154。 在 粗轧操作侧.Opc_Conn() 位置 d:\KDSBZSGLXT\粗轧操作侧.aspx.cs:行号 41System.NullReferenceException: 未将对象引用设置到对象的实例。 在 粗轧操作侧.Page_Load(Object sender, EventArgs e) 位置 d:\KDSBZSGLXT\粗轧操作侧.aspx.cs:行号 106
解决:
方法一:(实际测试成功,适用于如服务等非网站的情况)
Resvr32 .net中引用控件的名称
如果注册成功,问题不在出现
但是如果是在x64位的系统中,即使控件注册成功,错误依照提示,是因为大多数第三方写的COM控件,只支持32位的系统,
在VS中找到引用控件所在的项目--〉属性--〉生成--〉常规---〉目标平台---〉选择X86即可解决。
如果不行的话,找到对应版本的32位的OPCDAAuto.dll文件,拷贝到C:\Windows\System32目录或项目目录下,执行"REGSVR32 C:\Windows\System32\OPCDAAuto.dll"或"REGSVR32 X:\项目路径\OPCDAAuto.dll"命令,再加上前面的“目标平台”->x86,应该就可以了。
如果32位注册不了dll的话,找到64位系统上的C:\Windows\sysWOW64目录,把OPCDAAuto.dll拷到那个目录下,执行"REGSVR32 OPCDAAuto.dll"命令,再加上前面的“目标平台”->x86,应该就可以了。
方法二:(未解决,无效)
1:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
2:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
3:在"DCOM配置"中找到使用到的应用程序,如OpcEnum或OPC.SimaticNET等,,在它上面点击右键,然后点击"属性",弹出属性对话框
4:点击"标识"标签,选择"交互式用户"
5:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加
一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
5:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK
SERVICE"用户,然后赋予"本地访问"权限.
这样,我们便配置好了相应应用程序的DCOM权限.
注意:这是在WIN2003、WIN2008、WIN7等系统上配置的,在2000、XP上,则是配置ASPNET用户。
如果上述方法不能解决(Windows 2003)环境里的问题。可以用如下方法:
1、创建一个用户账号,设置所属于Power User或者User(本地系统账号);
2、运行DCOMCNFG,在Dcom组件里面找到Microsoft Excel 应用程序或者Microsoft excel文档-属性-标识里面选择“下列用户”,然后输入前面建立的帐号和密码就可以了;
当用Administrator用户远程连接到桌面后,能正常使用,但当退出远程桌面后,访问DCOM组件就有权限问题了。
方法三:(解决)
打开IIS管理器,查看项目的对应应用程序池,右击:
“常规”中,将“启用32位应用程序”选为“True”(默认为“Flase”);
如果不行,再在“高级设置”中,将“进程模型”中的“标识”选为“自定义帐户”,并设置Administrator及其密码即可。 |
|