- PR -

[VB.NET]二重起動防止

1
投稿者投稿内容
きん
会議室デビュー日: 2003/01/10
投稿数: 11
投稿日時: 2004-03-17 18:38
VB.NETで二重起動防止を行う場合、以下のような方法が
あると思いますが、問題があります。
原因・対策どなたかお知りでしたらご教授下さい。

方法1:OS:2000Server、XPだとチェックに10〜20秒かかる。
If UBound(Diagnostics.Process.GetProcessesByName( _
Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
'すでに起動していると判断する
End If

方法2:DEBUGモードでコンパイルしたEXEじゃないと利かない。
RELEASEモードのEXEは複数起動してしまう。
'Mutexクラスの作成
Dim m As New System.Threading.Mutex(False, "MyName")
'ミューテックスの所有権を要求する
If m.WaitOne(0, False) = False Then
'すでに起動していると判断する
End If



Tom
会議室デビュー日: 2004/03/17
投稿数: 13
投稿日時: 2004-03-18 14:46
Mutexクラスを初期所有権を与えて作成し、付与できたかどうか結果をもらう方法はどうでしょうか。

Dim Result As Boolean
dim m As New System.Threading.Mutex(True, "MyName", blnResult)
If Result = False Then
'すでに起動していると判断する
End If
きん
会議室デビュー日: 2003/01/10
投稿数: 11
投稿日時: 2004-03-18 14:54
返信ありがとうございます。

Mutexクラス方法だとWindows2000Serverでも高速に重複起動できましたが、
Releaseモードで実行するとチェックが利きませんでした。

色々調べてみると不思議な現象が起こりました。

Xmlファイルの読込メソッドがあるのですが、それをコールすると
Mutexが初期化されるようです。(デバッグモードだと初期化されない)
しかしXmlファイルのサイズを4K以下にすると不思議と正常に動作します。

結局根本原因はわからなかったのですが、原因となるXMLのメソッドを読んだ後に
Mutexによる重複起動チェックを行うようにしたらReleaseモードでもうまく動くようになりました。

徹夜
会議室デビュー日: 2004/03/22
投稿数: 11
投稿日時: 2004-04-05 18:04
すいません。
VB.NET2003 スマートデバイスアプリで私も同じ事を試みています。
引用--------------------------------------------------------------
方法1:OS:2000Server、XPだとチェックに10〜20秒かかる。
If UBound(Diagnostics.Process.GetProcessesByName( _
Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
'すでに起動していると判断する
End If
-------------------------------------------------------------------
プロセスコンポーネントを追加するという事ですよね。
スマートデバイスでは標準以外にコンポーネントを追加しても使えないみたいです。

引用--------------------------------------------------------
方法2:DEBUGモードでコンパイルしたEXEじゃないと利かない。
RELEASEモードのEXEは複数起動してしまう。
'Mutexクラスの作成
Dim m As New System.Threading.Mutex(False, "MyName")
'ミューテックスの所有権を要求する
If m.WaitOne(0, False) = False Then
'すでに起動していると判断する
End If
-------------------------------------------------------------

Dim m As New System.Threading.Mutexと記述すると

Dim m As New System.Threading.Mutex(False or True)
だけの指定でうまく記述が出来ませんでした。
同じVB.NETでも処理の仕方が違うのでしょうか?
ご存知の方教えて頂けないでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-06 07:51
引用:

徹夜さんの書き込み (2004-04-05 18:04) より:

Dim m As New System.Threading.Mutexと記述すると

Dim m As New System.Threading.Mutex(False or True)
だけの指定でうまく記述が出来ませんでした。


 「うまく記述が出来ません」とは、どのような状態なのでしょう?


 あなたが他人から「これ、うもう書けへんねんけど、なんでやろ?」とだけ言われて、何かアドバイスできますか?
1

スキルアップ/キャリアアップ(JOB@IT)