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 回答