流程。在产生更多新过程时启动慢速
-
29-09-2019 - |
题
通过启动的流程 Process.Start
当产卵过程(“孩子”)推出更多新流程(“孙子”)时,似乎有大约26秒的延迟 - 我正在尝试找到解决此问题的方法。具体而言,这是在原始过程(“父”)是ASP.NET网站或Windows服务(两者都尝试过)时发生的。
我们正在尝试运行服务器端命令行工具以收集信息,在文件系统中进行修改,并在“孩子”完成后继续使用其他过程。直接通过命令行创建“孩子”时,没有延迟,并且对于某些命令行参数,“孩子”不会产生新的过程,也没有延迟。但是,使用其他参数,“孩子”产生了“孙子”(与本身相同,但我们无法修改其代码),并且似乎在第一个过程是25-30秒(通常是26秒)延迟开始,然后正常运行。
我尝试修改 UseShellExecute
财产, CreateNoWindow
财产, WindowStyle
财产,无效。 ErrorDialog
和 RedirectStandard*
属性是错误的。
我使用的代码如下:
using (Process p = new Process())
{
p.StartInfo = new ProcessStartInfo(exePath, args)
{
WorkingDirectory = workingDirectory,
UseShellExecute = true,
CreateNoWindow = true,
};
p.Start();
p.WaitForExit();
}
哦,我认为这并不重要,因为我看到了其他地方引用的问题(但没有解决方案),但是我正在使用MSYSGIT的Git.exe的角度。
解决方案
很难说出这可能发生的原因,您需要进一步进行故障排除。
我建议您使用Process Explorer和Process Monitor来寻找潜在的问题。
我想问题不是直接在您的代码中,而是与用户的环境有关。例如,W3WP.EXE进程在非GUI会话(会话0)中运行,并且可能不会将用户配置为具有Web访问(代理配置),以便您在此处看到超时问题。
其他提示
我在执行.bat文件的情况下遇到了同样的问题,然后使用process.cmd呼叫process.cmd。如果.bat文件直接从命令行运行,则GIT命令将立即执行,但在Windows Service调用的任何时候都会完全延迟50秒。
这归结为许可问题。在配置我的Windows服务以作为用户运行(在我的情况下为管理员)之后,GIT进程立即运行。您可能可以修改服务安装程序以将服务作为“用户”运行,但是在安装以相同效果后,您可以修改服务属性。
可能有一些方法可以启用“本地服务”来解决延误,但我不知道如何。