1

小さな C# 実行可能ファイルを使用して Java jar を起動しています。必要に応じてjarを再起動できるように、jarから返された終了コードを回復したい。ただし、C# アプリケーションは黒いコンソール ウィンドウを表示し続け、それを取り除くことはできません。これを修正する方法を知っている人はいますか? 次の C# コードを使用してプロセスを開始しています

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "jre/bin/java.exe";
p.StartInfo.Arguments = "-Djava.library.path=bin -jar readermanager.jar";
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.RedirectStandardOutput = true;

p.Start();

p.waitForExit();
return p.ExitCode;

コンソール ウィンドウは、waitForExit(); を使用している場合にのみ表示されます。方法。これがないと (および p.ExitCode がないと)、コンソール ウィンドウが閉じます。また、StartInfo.WindowStyle を Hidden および Minimized に設定しようとしましたが、どちらもウィンドウには影響しません。

4

2 に答える 2

2

C# プログラムの出力タイプを「コンソール アプリケーション」ではなく「Windows アプリケーション」に変更するだけです。AC# Windows アプリケーションは、実際にウィンドウを表示するかどうかは気にしません。

于 2013-02-22T14:31:59.150 に答える
1

コンソールを非表示にして C# コンソール アプリケーションを実行する方法から

System.Diagnostics.ProcessStartInfo start =
  new System.Diagnostics.ProcessStartInfo();     
start.FileName = dir + @"\Myprocesstostart.exe";
start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

しかし、それがうまくいかない場合は、これはどうですか: http://social.msdn.microsoft.com/Forums/eu/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

using System.Runtime.InteropServices;

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);


IntPtr hWnd = FindWindow(null, "Window caption here");

if(hWnd != IntPtr.Zero)
{
    //Hide the window
    ShowWindow(hWnd, 0); // 0 = SW_HIDE
}


if(hWnd != IntPtr.Zero)
{
   //Show window again
   ShowWindow(hWnd, 1); //1 = SW_SHOWNORMA
}
于 2013-02-22T14:32:36.627 に答える