2013-02-22 278 views
1

我正在使用小型C#可執行文件來啓動java jar。我想恢復由jar返回的退出代碼,所以我可以重新啓動jar,如果我需要。 但是,C#應用程序不斷顯示一個黑色的控制檯窗口,我無法擺脫它,有誰知道如何解決這個問題? 我採用t,他下面的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設置爲隱藏和最小化,但兩者對窗口沒有任何影響。

+0

你爲什麼不只是使用一個窗口服務做你所描述的? – Freeman 2013-02-22 14:30:31

+0

因爲我只是想要一個簡單的可點擊的可執行文件來啓動Java應用程序。這不是一個Windows服務。只是桌面應用程序。 – Ozzie 2013-02-22 14:32:27

+0

[在C#控制檯應用程序中隱藏控制檯窗口]的可能的重複(http://stackoverflow.com/questions/3853629/hide-console-window-in-c-sharp-console-application) – 2013-02-22 14:32:43

回答

2

只是將您的C#程序的輸出類型更改爲「Windows應用程序」而不是「控制檯應用程序」。一個C#Windows應用程序並不關心你是否實際顯示任何窗口。

+0

感謝工作:) – Ozzie 2013-02-22 14:35:16

1

How to run a C# console application with the console hidden

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 
} 
+0

「我也嘗試將StartInfo.WindowStyle設置爲隱藏和最小化,但都沒有任何影響窗口。」 – Sayse 2013-02-22 14:33:10

+0

啊,沒有注意到那一部分。 – 2013-02-22 14:34:22