- - PR -
Dll化したFormの2重起動をチェックするには?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-08-02 23:38
C#.Netで開発をしております。
共通で使用する検索画面をDll化し、プログラムを作成しましたが、 Dll化した物だと2重起動チェックが掛からなくなりました。 MutexでもProcessでも×でした。 もしかしたらDll化したものは2重起動のチェックが出来ないのでしょうか? どなたかご教授願えたらと思います。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-08-03 00:10
もともとどのように2重起動チェックしていた物を、 どのようにDLL化したらだめになったんでしょうか? それがわからないと想像がつきません。 あと、Processでの2重起動チェックってなんですか? # あ、GetProcessesByNameだったかとかで探してってことですかね? | ||||||||
|
投稿日時: 2004-08-03 03:59
そもそも DLL はプロセスになりません(原則として単体では実行できないから,というのが直感的な理由です).ですので Process クラスを利用するのはおそらく無意味でしょう. 一方の Mutex クラスですが,文字列(識別子)をとるコンストラクタがあるようです.VS.NET のヘルプをざっと読んだ限りでは,これを利用すれば目的が実現できるように思われます. [ メッセージ編集済み 編集者: IZUMI Yusuke 編集日時 2004-08-03 04:03 ] | ||||||||
|
投稿日時: 2004-08-03 07:57
お二方に追加して、何をなぜ二重起動チェックするか、という仕様も明確にしないとダメ、かな。これはプロジェクトの中で、という話しですけど。
その画面をDLLにしたのはなぜか。なぜ、その画面が2つ以上現れてはいけないのか。本当に2つ以上現れる要件はないのか。もっと前の処理で予防しなければならないのではないか。etc... ↑↑mutexやウインドウ上の文字列でチェックすると、複数のアプリケーションで使用した場合、チェックにかかって表示できなくなりますよ、という話し。なので、シングルトンパターンの適用、とか。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-08-03 07:59 ] | ||||||||
|
投稿日時: 2004-08-03 10:34
お三方 ご返答ありがとうございます。
詳しく仕様を書きますと、 DLL化したものは各マスタの検索画面で、 プログラムメニューから起動した場合は、単体起動モードとして起動し その際に2重起動チェックを行いたい。 (問合せプログラムとして起動します) メニュー以外のプログラムから起動した場合は、検索起動モードとして起動し その際は2重起動のチェックは必要なし。 (項目の検索プログラムとして起動します) メニュープログラムから起動した場合のみ2重起動チェックをと 思いいろいろやっておりますが... このような場合にはどの様に制限をかけたらよろしいでしょうか? いろいろ調べつつやっておりますがなかなか・・・(困 ご教授願えたらと思います。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-08-03 10:42
諸農です。
「起動」という言葉が誤解を生んでいるのかな。。(^_^;) DLLというか、ある特定の型のフォームのクラスの インスタンス化するタイミングのことなのかしら。 プログラムメニューから起動するというのは、 メニューフォームからあるフォームクラスを インスタンス化しているのでしょうか? それとも、EXEをキックしているのでしょうか? そこがハッキリしないと回答も難しいと思います。
単純に、クラスライブラリに検索用フォームの呼び出しメソッドと 問い合わせ用フォームの呼び出しメソッドの2つを準備しておくだ けではダメなんでしょうか。 それぞれのメソッドの中で二重インスタンス化のチェックを行うとか。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2004-08-03 13:34
とりあえず、 http://quick-tips.hp.infoseek.co.jp/vs.net/sample/index.html ここから サンプル1のソリューションをダウンロード してみてください。で、コンパイルして、実行してください。 「複数表示」と、「単数表示」というボタンがあり、どちらのボタンも同じフォームが起動します。「複数表示」は、ボタンをクリックするごとに、フォームが表示されます。「単数表示」は、1つのフォームしか表示されず、2度目以降はそのフォームが最前面に出ます。 こういう動作でよろしいでしょうか?良かったら、動作を理解し、メンテができると思ったらまねてください。質問は受け付けますが、メンテができることが条件です。 | ||||||||
|
投稿日時: 2004-08-03 13:39
諸農殿 お返事ありがとうございます。
上記の回答ですが、フォームのインスタンスを作成しております。 DLLなのでEXEをキックする形ではありません。
今のところ使用している方法は、 1.引数(インスタンスへ渡す)を設定 <0:検索起動 1:単体起動> 2.引数を判断し、2重起動を行う <dll側で2重起動を判断> です。 どのような方法がBestかわからなかったので・・・ ちなみにForm_Load時にチェックをして 2重起動ならApplication.Exit()をしています。 それも良いのやら・・・ |