我从 Windows 服务启动进程时发生了一种情况
_________
| | * Process 1
| Service | -------> * Process ...
|_________| * Process n
服务使用的代码如下:
ProcessStartInfo startInfo = new ProcessStartInfo(executablePath, commandlineArgs);
startInfo.WorkingDirectory = instancePath;
startInfo.UserName = userB;
startInfo.Password = passwordSecureString;
startInfo.Domain = domain;
startInfo.UseShellExecute = false;
Process process = new Process
{
StartInfo = startInfo,
EnableRaisingEvents = true,
};
process.Start();
现在,我有两个帐户 - 为了简单起见,假设 A 和 B。该服务在第一个帐户下运行,并使用第二个帐户启动进程。
下表应该表明在哪个帐户星座中发生的情况。
_______________
| | A | B |
|===+=====+=====|
| A | OK | X |
|---+-----+-----|
| B | X | OK |
|___|_____|_____|
...这让我假设用户更改导致了问题。
发生异常的详细信息:
阅读完错误代码 142 后,这是我迄今为止尝试过的操作:
任何人都可以解决这个问题吗?
Stephen Martin 已经对这里发生的情况进行了解释,因此,如果您遇到原始问题中描述的问题,您可能会对以下博客文章感兴趣:
http://asprosys.blogspot.de/2009/03/perils-and-pitfalls-of-launching.html
史蒂芬在这里解释
哎呀,进程在哪里?检查事件日志(或者您可能收到应用程序错误弹出窗口)。应该有一个应用程序错误条目,表明您的进程是出现故障的应用程序,user32.dll 或 kernel32.dll 是出现故障的模块,例外情况是:0xC0000142。这可能有一些细微的变化,但基本上是说您的应用程序无法初始化。 原因是在初始化时,在运行任何应用程序代码之前,所有进程都附加到 Window Station,所有线程都附加到桌面,但您启动时使用的用户没有访问 Window Station 的权限以及正在其中启动进程的桌面,因此无法初始化。 必须调整 Window Station 和桌面的安全描述符,以向正在启动进程的用户授予 AllAccess 权限。直接在 .Net 中执行此操作是很困难的,因此您可能会发现此处的安全包装类很有用
如果您不喜欢使用 Stephen 的库,您还可以查看here提供的其他解决方案(我尚未测试过)。
我目前正在尝试在 arduino IDE 中验证我的代码,并遇到相同的错误,只是在这种情况下它出现在 IDE 中,任何人都可以帮助我