2011-09-21 10 views
5

私は別のクラスライブラリプロジェクトで別のプロセスとして定義されているウィンドウ(WPF)を表示するために探しています。これを行う方法はありますか?新しいプロセスで2番目のプロジェクトの新しいインスタンスを開始する方法

私はこの方法でそれを起動したときに占有メモリがそこに居るので、新しいプロセスでプロジェクトの第2インスタンスを起動する必要があります。

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

私は複数のプロジェクトとのONEソリューションを持っています。

  • スタートアッププロジェクトはWPFアプリです、出力タイプ:Windowsアプリケーション(exeファイル)。
  • 他のすべてのプロジェクトは、出力タイプ:クラスライブラリ(dllファイル)です。今私は、このコードによって、「アプリケーション」(DLLとして構築されたこの1つの溶液中の他のプロジェクトを)実行しています

secondProject.WPFWindow win = new secondProject.WPFWindow(); 
win.Show(); 

私が欲しい私は通常...新しいプロセスでのアプリのことでしょうrunnigされますProcess.Start()を使用してください、しかし、私はexeファイルが必要なので、このケースではありません。そして、私はDLLを持っています。

+1

2番目のプロジェクトは何ですか? –

+1

英語が驚くほどでない場合でも詳細を追加してください。 – Coops

+0

他のアプリの中で2番目のアプリを起動しようとしていますが、それは間違いありませんか? – Keeano

答えて

3

メインの.exeにコマンドライン引数を渡して、実行する 'サブアプリケーション'を指定することができます。その後、メインの.exeは新しいプロセスで起動し、実行するサブアプリケーションを新しいインスタンスに伝えることができます。メイン.exeのアプリで例えば、あなたのアプリケーションクラスでこのようにロジックを置く:

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     //See if exactly one command line argument was passed 
     if (e.Args.Length == 1) 
     { 
      //See if the argument is one of our 'known' values 
      switch (e.Args[0]) 
      { 
       case "launchApp2": 
        secondProject.WPFWindow win2 = new secondProject.WPFWindow(); 
        win2.Show(); 
        break; 
       case "launchApp3": 
        thirdProject.OtherWPFWindow win3 = new thirdProject.OtherWPFWindow(); 
        win3.Show(); 
        break; 
      } 
     } 

     //Probably want to call the base class always? 
     base.OnStartup(e); 
    } 
} 

を次にいつでもあなたは、あなたがこのようにそうすることができる新しいプロセスでサブアプリのいずれかを起動する:

public void LaunchApp2() 
{ 
    //Start a new process that is ourself and pass a command line parameter to tell 
    // that new instance to launch App2 
    Process.Start(Assembly.GetEntryAssembly().Location, "launchApp2"); 
} 
+0

素晴らしい!それは私が探しているものであるかもしれない:)私はそれをできるだけ早くテストし、私はあなたに知らせる。 – DefinitionHigh

+0

ありがとうございました!これだよ! :) 私は基本クラスを常に呼び出すためにワットをしません。 – DefinitionHigh

+0

そして、私はこのプロセスを何らかの方法でマークできますか?例えば、プロセス記述を設定することによって?私は同じプロジェクトの複数のインスタンスをprevetしたいと思います。 – DefinitionHigh

0

1つのプロジェクトがアプリケーション(EXE)でコンパイルされ、もう1つがクラスライブラリ(DLL)でコンパイルされる2つのプロジェクトのソリューションがあるとします。私は、DLLには、EXEから開始したい何らかのタイプ(例えば、ウィンドウ)が定義されていると仮定します。

これを行う最も簡単な方法は、単にDLLへの参照を追加することです。ソリューションエクスプローラでEXEプロジェクトを右クリックし、参照の追加...を選択します。ダイアログが開いている間、少し待ってください。 プロジェクトタブから、DLLプロジェクトを選択します。 [OK]をクリックします。

あなたのEXEプロジェクトでは、WPFWindowをインポートタイプとして利用できます。あなたはWPFWindowを使用する各コードファイルの先頭に

using secondProject;

を追加する必要があります。私は通常これをキーボードショートカットCTRL + Periodを使って自動的に行います。

私が記述した方法は、C#でDLLを使用する標準的な方法です。 を手動でロードすることができますが、これはもう少し複雑で、実行したいことではない可能性があります。

編集:

アレクセイは正しいです。私たちがここにいるのはXY Problemだと思います。おそらく非常に簡単ですが、アプローチ(DLLで定義されたウィンドウのインスタンス化)はそうではありません。

コード自体がDLLで定義されているにもかかわらず、実行しているコード(ケースではWPFWindow)はアプリケーションから発生している必要があることに注意してください。 DLL自体は通常、オペレーティングシステムにのコードを実行する方法に関する情報を提供しません。

Processを使用して呼び出すWPFWindowを実行する別のEXEプロジェクトを追加することを検討してください。しかし、この提案は間違っているかもしれませんが、私たちはあなたの最終目標がまだ分かりません。あなたは「鳥のように私の羽をどのように羽ばたかせるのですか?正しい質問が「飛行機のチケットを買うにはどうすればいいですか?

+1

すでに完了しました。私はプロジェクト2からAPPを実行する方法を知っています。次のコードでこれを行います:secondProject.WPFWindow win = new secondProject.WPFWindow(); win.Show(); NEW PROCESSで実行する方法を見つけていることを誰かが理解できますか? – DefinitionHigh

関連する問題