2017-02-19 13 views
0

我不確定如何對此問題進行短語處理,請耐心等待。在另一個.exe中調用Main()併產生一個連接的控制檯窗口

我正在創建一個沙箱來運行具有不同權限的.exes。基本上,我建立在這篇文章中的示例:https://msdn.microsoft.com/en-us/library/bb763046(v=vs.110).aspx

在重新設計之前我要提到,我的項目有一個控制檯應用程序輸出類型(項目 - >屬性 - >應用程序 - >輸出類型)儘管事實上它主要是一個WPF項目。這導致在程序開始時顯示控制檯窗口和我的GUI。

在沙箱中運行控制檯應用程序時,輸出將被寫入已打開的控制檯窗口,而不會創建與測試中的.exe綁定的另一個控制檯。我試圖避免這種情況,並希望我的輸出類型保持爲Windows應用程序,以防止無用的控制檯窗口打開。

至於我可以告訴大家,這個問題來自這行代碼莖:

target.EntryPoint.Invoke(null, parameters);

這個運行在我的測試下的.exe的Main(string[] args)方法,但它不釀出自己的控制檯窗口和錯誤隨之而來。有什麼方法可以創建一個控制檯窗口並將生成的進程附加到它?

謝謝,編輯和問題歡迎

P.S.在輸出類型被設置爲控制檯應用程序的情況下,其他輸出類型(例如窗體和wpf項目)完美地加載它們各自的GUI。

+1

的方法只能有一個控制檯窗口。你必須在你的設計中適應這一點。 –

回答

0

我的問題的答案涉及使用pInvoke爲了使用一些kernal32 api。添加這些DLLImports:

[DllImport("kernel32.dll")] static extern int AllocConsole(); [DllImport("kernel32.dll")] static extern int FreeConsole();

這些讓我分配一個控制檯的過程,我即將推出,我可以離開我的項目作爲Windows應用程序。所有需要發生的事情是將我的調用放在Alloc和Free之間。

這樣:

AllocConsole(); 

var trythis = target.EntryPoint.Invoke(null, parameters); 

FreeConsole(); 
相關問題