プロが教える店舗&オフィスのセキュリティ対策術

度々お世話になっています。

vb.net2003でアプリケーションを作りました。
そこで二重起動防止を行いたい為に、Process.GetProcessesByName メソッドを使用して行いました。
二重起動防止は出来ているのですが、ターミナルサービスでリモートデスクトップ接続を行い、同一ユーザーの二重起動防止はしたいですが、1ユーザーでも使用していたら
別ユーザーで起動できません。

何か良い方法はありませんでしょうか?
出来れば解説しているサイトがあれば教えて下さい。

A 回答 (2件)

Mutex クラス と System.Environment.UserNameを利用すれば可能かもしれません。



System.Environment.UserName で現在のスレッドを開始した人のユーザー名を
取得できると思うので、その取得したユーザー名をもとに

Mutex クラス を利用した2重起動チェックをもちいると可能かも。


Protected Shared Sub Main()

  Dim hMutex As New System.Threading.Mutex(False, Application.ProductName & System.Environment.UserName )
  If hMutex.WaitOne(0, False) = True Then
    GC.KeepAlive(hMutex)
    Application.Run(New Form1)
  Else
    Application.Exit()
  End If
  hMutex.Close()

End Sub

通常の Mutex をもちいた2重起動チェックは、Mutex を生成しする時に Application.ProductName
だけを用いますが、それに更にスレッドを開始した人のユーザー名を足した名前で作成すれば、
いいと思う。

Mutex の2重起動チェック方法は方々で利用されているので調べられたらよいと思います。
    • good
    • 0
この回答へのお礼

回答有難う御座いました。
Mutexクラスを使って実現できました。
有難う御座いました。

お礼日時:2008/08/25 12:45

1)アクセス情報ファイル(テキストファイルなど)を利用する。


・アクセス時に、アクセス情報ファイルを読み込み、同一利用者の情報があれば、アプリケーションを終了する。同一利用者の情報がなければ、アクセス情報ファイルに利用者情報を書き込む
2)データベースを利用する
・アクセス時に、データベースに問い合わせ、同一利用者情報があれば、アプリケーションを終了する。同一利用者の情報がなければ、データベースに利用者情報を書き込む

いずれの場合も、初回アクセス後の終了処理で、利用者情報を削除
するタイミングに注意が必要。
終了ボタンを押さずに、ウィンドウをクローズしたとか、タスクを
強制終了した場合、利用者情報を削除できない場合もある。
    • good
    • 0
この回答へのお礼

回答有難う御座いました。
Mutexクラスを使って実現できました。
有難う御座いました。

お礼日時:2008/08/25 12:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!