C#2008 Windowsアプリケーションの実行が完了しないという問題があり、問題を解決する方法を決定しようとしています。当初、C#2010コンソールアプリケーションは、C#2008コンソールアプリケーションを呼び出すように作成されていました。C#2008コンソールアプリケーションは、Webサービスを呼び出します。dosポップアップウィンドウが欲しくないので、これらのアプリケーションを両方ともWindowsアプリケーションに変更しました。
問題は、呼び出されたC#2008Windowsアプリケーションが実行を終了しないことです。プロセスはメモリに残ります。
以下にリストされているコードは、C#2010アプリケーションのコードの一部です。
private static Logger logger = LogManager.GetCurrentClassLogger();
try
{
Process eProcess = new Process();
strConsoleAppLocation = ConfigurationManager.AppSettings["client_location"];
String Process_Arguments = null;
eRPT_Process.StartInfo.UseShellExecute = false;
eRPT_Process.StartInfo.FileName = strConsoleAppLocation;
Process_Arguments = " 1 CLI";
eProcess.StartInfo.Arguments = Process_Arguments;
eProcess.Start();
eProcess.WaitForExit(1800);
Process_Arguments = null;
eProcess.StartInfo.UseShellExecute = false;
Process_Arguments = " 2 TIM";
eProcess.StartInfo.Arguments = Process_Arguments;
eProcess.Start();
eProcess.WaitForExit(1800);
eProcess.Dispose();
Process_Arguments = null;
}
catch (Exception e)
{
logger.Error(e.Message + "\n" + e.StackTrace);
}
C#2008アプリは、メモリ内のプロセスを調べても終了しないことを知っています。さらに、コード行を次のように変更するとeProcess.WaitForExit();
、アプリケーションは呼び出されたプログラムに戻りません。
アプリケーションと呼ばれるC#2008では、実行されるコードの最後の行は次のとおりです。
Environment.Exit(1);
したがって、この問題を解決するために、次の質問があります。
上記のコードを変更する方法についての推奨事項がある場合は、推奨事項を教えてください。
これらの2つのプログラムは現在本番環境にあるので、「バンドエイド」修正のためにこの問題を解決する方法について提案がありますか?C#2010プログラムの実行が終了したときに実行中のC#2008プロセスを停止する方法はありますか?実行が終了したときにC#2008アプリケーションが独自のプロセスを強制終了する方法はありますか?もしそうなら、この問題を解決する方法のコードを教えてもらえますか?
長期的な修正について、C#2008プロセスが停止しない理由を特定する方法と、修正する方法を教えてください。私はプロファイラーを使用しますが、私の会社にはVisual Studio 2010のプロフェッショナルバージョンしかありません。それで、あなたの推奨事項を教えてください。