我正在尝试从.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服务中运行?
答案 0 :(得分:2)
也许用户必须拥有“作为服务登录”的安全权限。这是通过“本地安全策略”应用程序完成的。和/或“作为批处理作业登录”。
答案 1 :(得分:2)
这与此问题here非常相似。答案通常是由于正在运行该进程的桌面和窗口站的安全问题。有关说明和示例代码,请参阅this article。
答案 2 :(得分:1)
这只是一个黑暗的镜头,但也许你可以尝试在交互模式下运行Windows服务。但是,如果可行,则无法在Windows Vista中完成此操作(因为会话0隔离)。
答案 3 :(得分:0)
使用Filemon,看看它是否正在尝试打开配置文件而不是找到它。由于配置格式错误,我曾经遇到过这个错误。