通过启动的流程 Process.Start 当产卵过程(“孩子”)推出更多新流程(“孙子”)时,似乎有大约26秒的延迟 - 我正在尝试找到解决此问题的方法。具体而言,这是在原始过程(“父”)是ASP.NET网站或Windows服务(两者都尝试过)时发生的。

我们正在尝试运行服务器端命令行工具以收集信息,在文件系统中进行修改,并在“孩子”完成后继续使用其他过程。直接通过命令行创建“孩子”时,没有延迟,并且对于某些命令行参数,“孩子”不会产生新的过程,也没有延迟。但是,使用其他参数,“孩子”产生了“孙子”(与本身相同,但我们无法修改其代码),并且似乎在第一个过程是25-30秒(通常是26秒)延迟开始,然后正常运行。

我尝试修改 UseShellExecute 财产, CreateNoWindow 财产, WindowStyle 财产,无效。 ErrorDialogRedirectStandard* 属性是错误的。

我使用的代码如下:

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进程立即运行。您可能可以修改服务安装程序以将服务作为“用户”运行,但是在安装以相同效果后,您可以修改服务属性。

可能有一些方法可以启用“本地服务”来解决延误,但我不知道如何。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top