System.Diagnostics.Process.Start() 从 Windows 服务调用时无法启动进程

Posted

技术标签:

【中文标题】System.Diagnostics.Process.Start() 从 Windows 服务调用时无法启动进程【英文标题】:System.Diagnostics.Process.Start() cannot start process when called from Windows service 【发布时间】:2009-01-18 23:54:15 【问题描述】:

我正在尝试从 .NET Windows 服务启动外部进程。在过去,我使用了Process.Start() 重载,它采用可执行路径和命令行字符串。这行得通。但现在我想启动该过程并让它在特定用户的上下文中运行。所以我称这个版本为Start()

public static Process Start(
    string fileName,
    string userName,
    SecureString password,
    string domain)

但是,当我调用该方法时,我尝试运行的应用程序会生成一个未处理的异常:

The application failed to initialize properly (0xc0000142). Click on OK to terminate the application.

我尝试启动不同的应用程序,它们都生成相同的异常。我已经在 Windows 服务之外运行了代码,并且应用程序可以正确启动。

那么有没有办法让它在 Windows 服务中工作?

【问题讨论】:

这看起来像是这个问题的重复:***.com/questions/362419/… 任何带有完整源代码示例的最终解决方案? 【参考方案1】:

也许用户必须拥有“作为服务登录”的安全权限。这是通过“本地安全策略”应用程序完成的。和/或“作为批处理作业登录”。

【讨论】:

如果没有在服务中运行时可以正常工作,通常是权限问题。【参考方案2】:

这与这个问题here 非常相似。答案通常是由于运行进程的桌面和窗口站的安全问题。有关说明和一些示例代码,请参阅 this article。

【讨论】:

【参考方案3】:

这只是在黑暗中拍摄,但也许您可以尝试在交互模式下运行 Windows 服务。但是,如果这样可行,则无法在 Windows Vista 中完成(因为 Session 0 Isolation)。

【讨论】:

【参考方案4】:

使用 Filemon 并查看它是否正在尝试打开配置文件但没有找到它。由于配置错误,我曾经遇到过此错误。

【讨论】:

应用程序是一个简单的 Win32 应用程序(即没有配置文件)。

以上是关于System.Diagnostics.Process.Start() 从 Windows 服务调用时无法启动进程的主要内容,如果未能解决你的问题,请参考以下文章