2014-11-03 42 views
-1

從C#程序,我執行字節[]使用「調用」方法直接含在存儲器中其他.NET控制檯的應用程序,此代碼:使用調用以運行一個隱藏的控制檯應用程序

static void Main(string[] args) 
{ 
byte[] Bytes = File.ReadAllBytes("C:\\test.exe"); 

Assembly a = Assembly.Load(FileBytes); 
MethodInfo m = a.EntryPoint; 
var parameters = m.GetParameters().Length == 0 ? null : new[] { new string[0] }; 
m.Invoke(null, parameters); 
} 

但是,由於我在內存中啓動的控制檯應用程序(「C:\ test.exe」)永遠不會結束(它使用一段時間永遠循環),因此黑色cmd窗口不會消失。

它如何隱藏執行?現在我不能使用例如'System.Diagnostics.ProcessWindowStyle.Hidden',因爲進程不在磁盤中。

+3

你推出,沒有吃午飯:)和在這裏看到http://stackoverflow.com/questions/836427/how-to-run-ac-sharp-console-application-with-隱藏的控制檯,你也可以看到只是創建一個Windows服務或從一個開始這個代碼,你不會看到控制檯窗口 – 2014-11-03 20:25:55

+2

@eddie_cat沒有午餐對我:( – Servy 2014-11-03 20:26:31

+0

哈哈抱歉我的英語不好= P – samsam 2014-11-03 20:28:05

回答

0

我能想到的兩種解決方案:

1.更改您的控制檯應用程序的輸出類型從Console ApplicationWindows Application。您可以將其從Project Properties更改。這將隱藏控制檯窗口。

2.將彙編字節寫入文件並使用Process.Start隱藏控制檯窗口。事情是這樣的:

var f = Path.GetTempFileName() + ".exe"; 
File.WriteAllBytes(f, assemblyBytes); 
var p = new Process(); 
p.StartInfo.FileName = f; 
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; 
p.Start(); 
+0

因爲我不能接觸磁盤,所以我使用了你的第一個解決方案,它工作。再次感謝! :) – samsam 2014-11-03 20:56:25

0

在OP的情況下,他們澄清說他們可以修改正在加載的程序集的源代碼。在這種情況下,您應該能夠將應用程序設置爲GUI應用程序,這將防止打開控制檯窗口。有關如何檢測正在控制檯的應用程序的討論,請參閱How can I determine the subsystem used by a given .NET assembly?

+0

謝謝你的回答,這也應該工作,可悲的是,我只能獎勵1個答案。 – samsam 2014-11-03 20:57:32

相關問題