从 Windows 服务调用时 Process.Start 不起作用

Posted

技术标签:

【中文标题】从 Windows 服务调用时 Process.Start 不起作用【英文标题】:Process.Start does not work when called from windows service 【发布时间】:2014-03-24 10:14:27 【问题描述】:

在 Windows 8 上,我正在运行 Windows 服务。该服务应该通过

启动一个程序
Process.Start(exePath);

但是进程会立即退出 - 甚至 Main 过程中的第一行也没有执行。之前,在 Windows 7 上的同一服务中运行同一进程时,一切正常。

我怎样才能让它再次工作?如何从 Windows 服务正确启动进程?

【问题讨论】:

嗨,即使我也面临同样的问题。我在本地系统帐户下的 Windows 7 系统上运行我的 Windows 服务。这个过程根本没有开始。任何帮助将不胜感激。 【参考方案1】:

找到了解决办法。流程必须像这样开始:

ProcessStartInfo info = new ProcessStartInfo(exePath);
info.CreateNoWindow = true;
info.UseShellExecute = false;
Process.Start(info);

由于某些原因,在 SYSTEM 后台创建 shell 窗口时存在权限问题。

【讨论】:

这是您解决问题的方法,但很难回答您提出的问题。你没有提供任何真实的细节,然后给出了一个似乎是基于魔法的答案。没有解释为什么。这是一个自我回答的问答题。这将如何在未来对任何人有用?您可以做的是为某人提供足够的信息来重现该问题。然后你可能会得到一个很好的答案并获得一些理解。就目前而言,您将被留下这个魔法咒语。 我搜索了答案,没有找到合适的。然后感谢链接groups.google.com/forum/#!msg/comp.windows.misc/E93qPCdaV4k/… 我找到了这个解决方案。它是关于 C++ 和一些未知库的链接,解释不是很清楚,唯一(非常)有用的是“CREATE_NO_WINDOW”标志,这导致我找到了这个解决方案,我想分享给其他人,以便更快地找到它。我也希望得到更深入的解释。 你不明白我的意思。这可能,也许,是你的问题的解决方案。但这不是您所问问题的答案,其中不包含真正可操作的细节。根据您提出的问题,任何人将如何将此答案与他们的问题联系起来。也许你应该改进这个问题。否则,在我看来,这是毫无意义的。 不管解释如何,该解决方案都帮助我解决了同样的问题。谢谢弗拉康! 就像这里***.com/a/27997144/4684145 它解决了我解压缩 7zip 存档的问题,谢谢!【参考方案2】:

在您的 Process 实例上使用 WaitForExit 方法将指示等待时间过去或进程退出。

See this MSDN link for more.

【讨论】:

进程在大约 12 毫秒内退出。很快。没有代码运行。

以上是关于从 Windows 服务调用时 Process.Start 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

无法访问显示组件 - 从 Windows 服务调用

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

从 Windows 服务调用时出现 WCF 安全异常

XpsDocumenWriter从Windows服务挂起,但从控制台运行时工作正常

无法从 Windows 服务调用动态加载的 DLL 中的类

打开 Windows 身份验证时使用 ajax 调用 Web 服务?