开发者

COM component works 100% from a console app, but fails when called from a service

I need your advice for the following C# code:

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.

Here are the symptoms:

Windows Server 2008 R1:

  • Code fails when executed from a Windows service app.
  • Code works 100% when executed from a console app.

Windows 7:

  • Code works 100% when executed from a Windows service app.
  • Code works 100% when executed from a console app.

The class IVDDSEnt() is a COM object that is installe开发者_JAVA技巧d you install the "ivolatility SDK".

Update:

  • When I execute "System.IO.Directory.GetCurrentDirectory()" from the console application, it returns "D:\MyDevDirectory\"
  • When I execute "System.IO.Directory.GetCurrentDirectory()" from the service application, it returns "C:\windows\system32\".
  • The application is actually the same binary for both service and console (its a hybrid app that can run in console mode, or install itself as a service if you pass "-service" to it on the command line).

Update:

Added try/catch, and "e.GetBaseException" (defined as "Returns the exception which is the root cause of one or more subsequent exceptions"):

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)

Update:

Still can't fix the problem - the easiest way might be to just upgrade from Windows Server 2008 R1 to Windows Server 2008 R2 (if it works on Win7, and Windows Server 2008 R2 has a Win7 core, perhaps it'll work around the underlying issue somehow?).


That's probably a rights problem. Check under which service account the service runs and its rights. Then either change the service account or expand its rights.


CO_E_SERVER_EXEC_FAILURE is "Server execution failed".

This would indicate the component should be out of process, but the COM runtime could not start the executable (or, maybe, load the dll into a host process).

Looking for activity against the file containing the component with Process Monitor might give you a clue (it could be permissions: Process Monitor could confirm this).


Perhaps I have to specify an account to run the service under?

For a complete example of how to code this up, see:

http://www.codeproject.com/KB/WPF/LtoE.aspx?artkw=LINQ%20to%20WCF#ShowIt

Search for the text: "When the installer is run, it will allow you to enter the service login credentials to run under, using the following dialog box":

COM component works 100% from a console app, but fails when called from a service

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜