2017-02-19 3 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

私の問題に対する答えは、いくつかのkernal32 apiを使うためにpInvokeを使うことです。これら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(); 
関連する問題