

WPF、Windows Forms問わずに共有されるライブラリ(dll)があるとして、
そのライブラリを呼び出したEXEがWPFなのか、フォームなのか、コンソールなのかを判定する方法は、ありませんか？

  * リフレクションを使用する方法でも構いません。

[開発環境]  
C# 6.0  
.NET 4.5.1  
VS2015 Preview


CC BY-SA 3.0
2015-01-06T13:29:52.137
3199
2015-01-06T15:20:19.947
2207
question
windows c# .net
実行時にWPFかフォームかをDLL側から判定したい。


`AppDomain`に`PresentationFramework.dll`が読み込まれていて、`System.Windows.Application.Current`がnullでない場合はWPFアプリと判断してよいと思います。
これはフォーム上で`ElementHost`を使用していても明示的に`Application`を作成しない限り有効です。


CC BY-SA 3.0
2015-01-06T13:36:22.010
3201
2015-01-06T15:20:19.947
2015-01-06T15:20:19.947
5750
5750
3199
answer


もう少し目的をはっきりさせる必要があると思います。単にアセンブリを読み込んでいるだけ※の場合もありますし、スレッドプールから呼び出された場合にはスタックフレームには痕跡がないかもしれません。WPFがWinFormsをホストしたりその逆もできます。また、ILDASM.EXEのように敢えてコンソールアプリケーションとして起動してからフォームを開くものもあります。

※ [Application.StartupPath](http://msdn.microsoft.com/ja-
jp/library/system.windows.forms.application.startuppath\(v=vs.110\).aspx)が使いたくてWinFormsを読み込んだことがあります…。


CC BY-SA 3.0
2015-01-06T13:57:48.530
3207
2015-01-06T13:57:48.530
4236
3199
answer