C# COM组件在控制台应用程序中100%工作,但从服务调用时失败

C# COM组件在控制台应用程序中100%工作,但从服务调用时失败,c#,.net,windows-7,windows-services,C#,.net,Windows 7,Windows Services,我需要你对以下C#代码的建议: 以下是症状: Windows Server 2008 R1: 从Windows服务应用程序执行代码时失败 当从控制台应用程序执行时,代码100%工作 Windows 7: 从Windows服务应用程序执行时,代码100%有效 当从控制台应用程序执行时,代码100%工作 类IVDDSEnt()是一个COM对象,在安装“ivolatility SDK”时安装 更新: 当我从控制台应用程序执行“System.IO.Directory.GetCurrentDir

我需要你对以下C#代码的建议:

以下是症状:

Windows Server 2008 R1:

  • 从Windows服务应用程序执行代码时失败
  • 当从控制台应用程序执行时,代码100%工作
Windows 7:

  • 从Windows服务应用程序执行时,代码100%有效
  • 当从控制台应用程序执行时,代码100%工作
类IVDDSEnt()是一个COM对象,在安装“ivolatility SDK”时安装

更新:

  • 当我从控制台应用程序执行“System.IO.Directory.GetCurrentDirectory()”时,它返回“D:\MyDevDirectory\”
  • 当我从服务应用程序执行“System.IO.Directory.GetCurrentDirectory()”时,它返回“C:\windows\system32\”
  • 对于服务和控制台,应用程序实际上是相同的二进制文件(它是一个混合应用程序,可以在控制台模式下运行,或者在命令行上将“-service”传递给它时将自身安装为服务)
更新:

添加了try/catch和“e.GetBaseException”(定义为“返回异常,该异常是一个或多个后续异常的根本原因”):

更新:


仍然无法解决此问题-最简单的方法可能是从Windows Server 2008 R1升级到Windows Server 2008 R2(如果它在Win7上工作,并且Windows Server 2008 R2有一个Win7内核,也许它会以某种方式解决基础问题。)

这可能是一个权限问题。检查服务运行的服务帐户及其权限。然后更改服务帐户或扩展其权限。

CO\u E\u SERVER\u EXEC\u FAILURE
为“SERVER execution failed”

这将指示组件应该处于进程外,但COM运行时无法启动可执行文件(或者,可能将dll加载到主机进程中)


根据包含的组件的文件查找活动可能会给您一个线索(可能是权限:Process Monitor可以确认这一点)。

也许我必须指定一个帐户来运行该服务

有关如何编写此代码的完整示例,请参阅:

搜索文本:“安装程序运行时,将允许您使用以下对话框输入要运行的服务登录凭据”:


“异常失败”您认为告诉我们什么异常会有用吗?肯定需要异常转储,否则我们将一事无成。异常似乎没有太大帮助:“MyHelper.LogThis.OneException:exception“NullReferenceException”:“对象引用未设置为对象的实例。”。有什么方法可以得到一个更全面的异常转储吗?尝试了这个,没有运气。我试着勾选“允许服务与桌面交互”。我尝试将服务登录设置为“管理员/Mypassword”。我试着关掉UAC。我还尝试了“oleview”来设置由“管理员”运行的COM对象的权限。还有其他想法吗?@Gravitas:如果COM服务器已停止运行,您可能需要对其进行配置,使其可以访问。看看这里:干杯,我明天早上就来试试。这是一个恼人的问题:它在办公室的开发机器上100%作为服务工作,但在部署到远程AmazonEC2服务器时会中断。
EgarDDSEnt.IIVDDSEnt dds = null; // This line executes fine.
dds = new IVDDSEnt();  // This line fails with an exception ...
dds.Connect("username", "password"); // ... which makes this line fail too.
System.Runtime.InteropServices.COMException (0x80080005): Retrieving
the COM class factory for component with CLSID
{FA944FE7-AEB8-4B5B-8315-11D19B1F6264} failed due to the following error:
80080005 Server execution failed (Exception from HRESULT:
0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
at PhiDataOnSchedule.ConsoleApplication.MyMain(Boolean dummyRun)