解决C#调用执行js报检索 COM 类工厂中 CLSID 为 {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 组件失败 - 小众知识

解决C#调用执行js报检索 COM 类工厂中 CLSID 为 {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 组件失败

2013年01月27日 14:18:05 苏内容
  标签: C#/COM
阅读:7328

最近做了一个模拟请求的网站简化原网站的繁琐数据,提出有用的数据简单展示并完成post.由于原网站数据有js加密,所以我抓出原网站的js解密方法,由C#调用js得到解密后的数据。

整个抓包的框架是用的苏飞的HttpHelper万能框架,执行js方法则是用框架已实现的HttpHelper.JavaScriptEval方法,码好代码,实现功能,本地调试一切正常.于是我把网站部署到IIS上,这时问题来了.

部署上IIS之后访问开始报异常,具体错误: 
Exception type: COMException 
Exception message: 检索 COM 类工厂中 CLSID 为 {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。 
找不到这个组件,那这个组件去哪了,我得把他找出来.

第一步:注册表寻找这个值,打开注册表,在注册表中查找{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC} 这个值找到了这个,MSScriptControl.ScriptControl,对应的组件是msscript.ocx:

regedit

第二步:注册msscript.ocx这个组件,32位的系统在C:\Windows\System32\下面,我是64位的系统在C:\Windows\SysWOW64\下面.

以管理员身份运行Cmd 执行命令:Regsvr32 C:\Windows\SysWOW64\msscript.ocx(32为系统路径用C:\Windows\System32\msscript.ocx)

注意一定要用管理员身份运行Cmd,否则DLLRegitsterServier会没有执行权限.注册成功结果:

cmd

完成以上两个步骤之后,恢复正常.

 

遇到这种只能编译成x86的组件,那么就必须将 生成 目标平台 设置成  x86

参考文章:

http://www.dotblogs.com.tw/stanley.hsu/archive/2010/04/07/14445.aspx

 

 

 

还有一个问题是查看引用组件的属性,设置【嵌入互操作类型】为false

 

 


扩展阅读