より多くの新しいプロセスを生み出すときに、Process.Startが遅くなります

StackOverflow https://stackoverflow.com/questions/3513830

質問

経由で起動したプロセス Process.Start 生成されたプロセス(「子」)がより新しいプロセス(「孫」)を起動すると、約26秒の遅延があるようです。この問題を解決する方法を見つけようとしています。具体的には、これは元のプロセス(「親」)がASP.NET Webサイトまたは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にポイントを使用しているExepath。

役に立ちましたか?

解決

これが起こるかもしれない理由を伝えるのは難しいので、さらにトラブルシューティングを行う必要があります。

プロセスエクスプローラーとプロセスモニターを使用して、潜在的な問題を探すことをお勧めします。

問題はあなたのコードに直接ではなく、ユーザーの環境にもっと関連していると思います。たとえば、W3WP.EXEプロセスは非GUIセッション(セッション0)で実行され、ユーザーはWebアクセス(プロキシ構成)を設定されていないため、ここでタイムアウトの問題が表示される可能性があります。

他のヒント

WindowsサービスからProcess.startを使用してgit.cmdを呼び出した.batファイルを実行するのとまったく同じ問題がありました。 .batファイルがコマンドラインから直接実行された場合、gitコマンドはすぐに実行されますが、Windowsサービスから呼び出されたときはちょうど50秒遅れます。

許可の問題になりました。 Windowsサービスをユーザー(私の場合は管理者)として実行するように構成した後、GITプロセスはすぐに実行されました。おそらくサービスインストーラーを変更して「ユーザー」としてサービスを実行することができますが、同じ効果にインストールされた後にサービスプロパティを変更することができます。

「ローカルサービス」を有効にして遅延を回避する方法があるかもしれませんが、方法はわかりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top