2012-01-04 10 views
0

WPFアプリケーションを起動するAppDomain.ExecuteAssembly呼び出しの一部として渡されるコマンドライン引数にアクセスする明確な方法はありますか?別のappdomainのWPFアプリケーションへのコマンドライン引数へのアクセス

私は別のアプリケーションドメインでWPFアプリケーションをスピンアップし、そのようなアプリケーションに引数を渡している:

AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name"); 
moduleDomain.ExecuteAssembly(path, new[] { "arg1", "arg2" }); 

Environment.GetCommandLineArgs()StartupEventArgsの両方がコマンドライン引数を返すので、これらの引数にアクセスするためのwork-aroundは、あります元のアプリケーションではなく、ExecuteAssembly()でスピンアップされたアプリケーションではありません。

私は、好ましくはStartupEventArgsを使用してMainメソッドを手動で定義しなくても、WPFアプリケーションに渡される引数にアクセスしたいと考えています。そうする方法はありますか?

別のプロセスでWPFアプリケーションを起動するとパフォーマンスは低下し、デバッグは複雑になります。

+1

コマンドライン引数が単に 'string'であり、それらが不変であることを考慮すると、' string'プロパティの中にそれを保持し、そのプロパティの値を渡すのはなぜですか?異なるドメイン間で文字列を渡すことはできますか?私はイエスと思う。 – Tigran

+1

ありがとう、Tigran、これはAppDomain.SetDataを使用して私が満足しているソリューションに導いてくれます。このシステムでは、さらに8時間は回答を投稿できませんが、できるだけ早く全解決策を投稿します – Caleb

答えて

2

Tigranのコメントは、コマンドライン引数の代わりにAppDomain.SetDataを使用して私が満足している解決策に導いてくれました。基本的なアウトラインは次のようになります。

その後
AppDomain moduleDomain = AppDomain.CreateDomain("Friendly Name"); 
moduleDomain.SetData("arg1", "arg1Value"); 
moduleDomain.SetData("arg2", "arg2Value"); 
moduleDomain.ExecuteAssembly(path); 

、WPFアプリの「引数を」にアクセスするために:これは私のユースケースに適しています

string arg1Value = AppDomain.CurrentDomain.GetData("arg1"); 
string arg2Value = AppDomain.CurrentDomain.GetData("arg2");