DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Cosole ApplicationかWindows Applicationかをライブラリで判断する方法

環境/言語:[.NET Framework2.0/Library]
分類:[.NET]

Cosole ApplicationかWindows Applicationかをライブラリで判断する方法
があれば教えて欲しいと考えています。

当方、いろいろとキーワードで調べてみたのですが、
該当する良案がなかったです。

(今のところ、exeをバイナリ解析すれば判断できるところ
までわかったのですが、とても良案とはいえず
 登校させていただきました。)

お手数かと思いますが、何か情報をお持ちのかた
アドバイスをお願いします。

一番良いのは、何かのプロパティでそれが判断できると
いいのですが、、、
■No24360に返信(kiyo7447さんの記事)
> Cosole ApplicationかWindows Applicationかをライブラリで判断する方法
> があれば教えて欲しいと考えています。
それは、下記のどちらかのケースでしょうか?

1.どちらの種別から参照されたか知りたい。(同じプロセス)
2.指定したファイルがどちらの種別か知りたい。(別プロセス or 対象のプロセスなし)

素朴な疑問なのですが、なぜ、それを知りたいのでしょうか?
知ることで何を狙っているか、あるいは知らないと困ることも添えていただけると、それに応じたアドバイスがもらえる可能性があります。
こんにちは

1.どちらの種別から参照されたか知りたい。(同じプロセス)

です。
というのは、メッセージやエラーメッセージの表示をライブラリで行おうかと思って相談しました。ライブラリだと、Console Applicationと Windows Applicationで使用されるのでそこを同じI/Fで内部で切り分けられるのかな?
と思い相談させていただきました。
例えば、Windowsフォームアプリケーションから参照されていたと分かったとしても、そのライブラリの関数がバックグラウンドスレッドで実行されている等、メッセージボックスを出して欲しくないといった事情まではくみ取れません。
また、メッセージボックスやコンソール出力として通知してしまうと、ライブラリ利用者(アプリケーション開発者)側ではエラーの詳細をハンドリングできなかったり、隠蔽することができなくなる等、ライブラリの自由度が下がります。

ライブラリ側でエラー通知イベントを用意して、その引数でエラー情報を渡して、ライブラリ利用者(アプリケーション開発者)がそのイベントハンドラでメッセージボックスを出すか、コンソールに出力するか等を組むようにしてはいかがでしょうか?
> Cosole ApplicationかWindows Applicationかをライブラリで判断する方法
> があれば教えて欲しいと考えています。

  ここのTipsにある・・・
  http://dobon.net/vb/dotnet/process/finduiprocess.html

  これを応用してできませんか?

  プロセス一覧からメインウィンドウハンドルのありなしで
  判断する・・・

※ 自分自身のプセス名もプロセスハンドルも解ってますので
  検索するのは容易なので。

以上。
■No24395に返信(オショウさんの記事)
>   プロセス一覧からメインウィンドウハンドルのありなしで
>   判断する・・・
それをやるのであれば、System.Windows.Forms.dllを参照して、ApplicationクラスのOpenFormsに登録されているフォームの有無で分かるんじゃないかなぁ。

ただ、技術的に可能だとしても、先に書いたようにイベントとして提供することを推奨するというスタンスは変わりません。
> ただ、技術的に可能だとしても、先に書いたようにイベントとして提供することを推奨するというスタンスは変わりません。
に賛成ととりあえず言っておいて。
// あとは Trace/Debug みたいにリスナを呼び出し側に用意させるか。

>>  プロセス一覧からメインウィンドウハンドルのありなしで判断する・・・
> それをやるのであれば、System.Windows.Forms.dllを参照して、ApplicationクラスのOpenFormsに登録されているフォームの有無で分かるんじゃないかなぁ。
常駐物でメインウィンドウは表示させてなかったり、WPF アプリだったり…と色々穴がありそうですな。

DOBON.NET | プログラミング道 | プログラミング掲示板