我有一个用c#编写的Windows服务。该服务托管在Windows Server 2016中。
此服务每隔相等的时间间隔执行一些计算。要进行此计算,它将在后台打开一个名为AutoCal的应用程序,该应用程序是COM组件。
该应用程序已安装在服务器中,其dll被添加为服务中的引用。
首先,该机器的版本为V4.1。我写了以下代码来打开应用程序。
(AutoCal.Application)Interaction.CreateObject("AutoCal.Application.NewInstance")
它曾经在后台打开,并且可以按预期正常运行。现在,应用程序版本已升级到V4.2,并卸载了旧版本。
当我运行相同的服务时,它会显示一个异常:
无法创建activeX组件。
搜索之后,我将上面的代码行更改为此,以查看是否有效:
(AutoCal.Application)activator.CreateInstance(Type.GetTypeFromProgID("AutoCal.Application.NewInstance"))
但这给出了一个完全不同的错误,如下所示。
使用CLSID检索组件的COM类工厂 {xxxxxx-xxxxx-xxxxxx-xxxxxxx}由于以下错误而失败: 80080005服务器执行失败(HRESULT的异常:0x80080005 (CO_E_SERVER_EXEC_FAILURE))
我已经搜索了此错误并确认是否已注册新的v4.2。我观察到只有V4.1在位置处的注册表中注册了
HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ CompanyName \ AutoCal \ V4.1。
所以我也使用以下命令注册了V4.2:cd windows\SysWOW64 --> regsvr32 "Path of .ocx file"
即使那样,它也给出了错误。
此外,由于AutoCal应用程序也是32位应用程序,因此我尝试构建窗口服务代码X86
而不是anycpu
并部署在服务器中。但这也不起作用。
我还有其他需要它解决的问题。在这方面的任何帮助都是非常有帮助的。谢谢。
PS:如果此信息有用,则服务器是64位计算机,AutoCal是32位应用程序。