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 服务调用时无法启动进程的主要内容,如果未能解决你的问题,请参考以下文章