C#Winform在64位系统中使用jmail组件时的一个错误

错误如下:

System.Runtime.InteropServices.COMException (0x80040154): 检索 COM 类工厂中 CLSID 为 {E5FF9F62-0E7C-4372-8AD5-DA7D2418070C} 的组件时失败,原因是出现以下错误: 80040154 

环境:windows server2008 64bit、.net framework3.5、C#语言


     业务需求:网站收到客户留言后,要在10分钟之内,马上告知业务员,业务员要在最短时间内,和留言用户取得联系。

     程序设计:

        方案一、在网站应用程序启动时,利用System.Threading.Timer类,开辟一个线程,设置每隔1分钟,检测一次,在收到最新留言的情况下,立刻邮件告知。

        方案二、创建windows服务

最后,两种方案都创建成功,我选择了windows服务。因为它自身独立与网站之外,不会因为错误或堆栈溢出,导致网站线程崩溃。而且,后期,可以通过扩展服务,来处理一些其它业务。

        之前在IIS7.0上,运用jmail组件,发送邮件,一切正常。可现在是运用windows服务,就出现了以上错误。前提是,jmail组件已经正确注册,所以不存在jmail组件未注册的情况。后来,网上看到,可能是注册表中的权限不足,于是找到注册表,添加了LocalService、SERVICE、NETWORK_SERVICE的访问权限,错误依旧。后来,干脆用Everyone(只是测试是否是权限问题导致该错误,慎重),经测试,这种说法也不适用于现在这种情况。后来就想,在64位和32位之间找问题,ASP.NET可以通过设置应用程序的属性,来改变.net运行模式,可winform呢?自然是在编译程序集时,稍加设置,编译器,默认是any cpu也就是说可以运行在64 x86两种模式下。我肯定,我的jmail是32位的,于是我把服务相关的每个程序集的平台,都改成x86,重新编译生成,然后发布测试,OK,成功接收到邮件!

      最后,想说的是,在做程序开发的过程中,记录系统日志,是一个很好很方便的方式,而且我一直在用log4net,现在感觉记录日志,已经成为我的一种习惯。开源中国,一个很好的学习交流平台。如果遇到类似的问题,可以在这里交流沟通。

    


 


你可能感兴趣的:(C#,jmail,80040154)