tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルAPLの多重起動のチェック方法について
記事No328
投稿日: 2003/07/29(Tue) 16:03
投稿者しんじ
[OSのVer]:Windows2000    [VBのVer]:VS.NET  

お世話になっております。
アプリケーションの重複起動を阻止する為以下のコードを記載したのですが、
エラーが返ってきてしまいます。
悩んだ挙句、何故エラーが返ってくるか理由が分かりません。
環境かな?と思いWin98などのPCにインストールをしてみても試しても変わりません。
どうしようも無く、Mutexを使用したところMutexでは正常に判定できるのですがスッキリしません。
大変お手数ですが、下記のコードが何故エラーになるのかご教授頂けないでしょうか?
また、MutexとProcessのどちらで判定させる方が良いのかも教えて頂ければ大変ありがたいです。

Processクラスを使ってエラーとなるコード:
If UBound(Diagnostics.Process.GetProcessesByName( _
    Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
    'すでに起動していると判断する
    MsgBox("重複起動はできません。", MsgBoxStyle.Information)
  Exit Sub
End If

返ってくるエラー:
'System.InvalidOperationException' のハンドルされていない例外が system.dll で発生しました。
追加情報 : プロセス パフォーマンス カウンタは無効にされているため、要求された情報を実行でき
ませ
ん。

Mutexのコードを使って正常に判定できるコード:
Dim createdNew As Boolean
Dim m As New System.Threading.Mutex(True, "Name", createdNew)
'--Nameは任意指定

If createdNew = False Then
'ミューテックスの初期所有権が付与されなかったときはすでに起動していると判断する
    MsgBox("重複起動はできません。", MsgBoxStyle.Information)
    '終了するコード
  Exit Sub
End If

[ツリー表示へ]
タイトルRe: APLの多重起動のチェック方法について
記事No329
投稿日: 2003/07/29(Tue) 17:20
投稿者よねKEN
参照先http://www5b.biglobe.ne.jp/~yone-ken/
> アプリケーションの重複起動を阻止する為以下のコードを記載したのですが、
> エラーが返ってきてしまいます。

レジストリの設定がおかしくなっているためです。

[キー]
\HKEY_LOCAL_MACHINE\SYSYTEM\CurrentControlSet\Services\PerfProc\Performance

[値名]
Disable Performance Counters

このデータを "0" にするかそれ自体を削除してみてください。

本家にもこの問題の技術情報があったはずだけど、ちょっと見つからないので、
他の参考ページ。↓
hhttp://www.caj.co.jp/resources/as2k/tec/as2k021010574.htm

> また、MutexとProcessのどちらで判定させる方が良いのかも教えて頂ければ大変ありがたいです。

というわけで、Mutex使っておいた方が無難でしょう。

[ツリー表示へ]
タイトルRe^2: APLの多重起動のチェック方法について
記事No330
投稿日: 2003/07/29(Tue) 18:47
投稿者しんじ
よねKENさん

技術情報確認致しました。
約5日間ぐらいはまっていたのですがスッキリしました。
本当にありがとう御座いました。

[ツリー表示へ]