- - PR -
二重起動チェックについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-11 22:43
こんにちは。篇銀です。
アドバイスを頂けないでしょうか。 【動作環境】 Microsoft Windows XP Professional Microsoft Visula Basic 2005 【事象】 会議室でも度々話題に挙がっている二重起動チェックですが、下記のコードを利用しております。挙動不審な現象として、アプリを正常終了しているのにもかかわらず、再起動すると、二重チェックに引っ掛かってしまう場合があります。但し、再度アプリを起動すると、正常に起動します。原因がわかる方がいらっしゃいましたらご教示ください。 '二重起動チェック If UBound(Diagnostics.Process.GetProcessesByName( _ Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then 'すでに起動していると判断する MessageBox.Show() Exit Sub End If | ||||
|
投稿日時: 2006-10-11 23:28
このコードであれば、タイミングしだいで起こり得るでしょうね。 Mutex を利用する方法に変更すると、解決するでしょう。 ちなみに、VB8 (2005) であれば、コードを組む必要はありません。 プロジェクトのプロパティで 「単一インスタンスのアプリケーション」 が設定できます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-10-12 10:36
じゃんぬねっとさん、こんにちは。
アドバイスをありがとうございます。 参考になりました。 | ||||
|
投稿日時: 2006-10-13 11:37
こんにちは。
ちょっと特徴的なコードだなぁと思って「UBound(Diagnostics」で検索したら、 マイクロソフトのページがひっかかりました。これを参考にされたんでしょうか。 http://www.microsoft.com/japan/msdn/vbasic/migration/tips/Process_mutex/ ちなみに下のほうに Mutex を利用するコードも書かれていますね。というか Mutex を利用する手段を解説するための「こういうやり方もあるんだけどね」的 な解説のようですね。
んー、この方法はむしろ「 Mutex を使えない場合の代替手段」だと思います。 上記のコードもそうですが、基本的には Mutex を使用するのが一番安全かつ 適切な方法だと思いますよ。 ちゃんとした方法が取れる環境で、わざわざ信頼性を落として別の方法を選択 する必要はないような気がします(何らかの理由があれば別ですが)。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2006-10-13 13:15
ちなみにこのコード、GC.KeepAlive メソッドの位置がおかしいです。 (なくても良いみたいですが) という連絡を以前したのですけど、直っていないですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1