2004.10.07

VB.Netでの多重起動防止

.NetのWindowフォームで多重起動を防止する方法といえば、
専ら Mutex を使用するのでしょう。
私が前に開発をしていた時は恥ずかしながらMutexを知らず、
VB6で使用していた多重起動防止処理をそのまま流用していました。

If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then

上記のように記述して、基本的には問題なく多重起動できなくなっていました。
しかし、その後特定の端末でアプリを起動しようとするとエラーが発生するようになり、
上の記述を外すとエラーが発生しなくなりました。
結局、Windows2000SP3で上記処理を実行すると
\HKEY_LOCAL_MACHINE\SYSYTEM\CurrentControlSet\Services\PerfProc\Performance
の値が書き換わってしまい(通常は0なのだが書き換わると1になる)
そのためにエラーになるということがある、ということが分かりました。
解決するには上記レジストリの値を元に戻すかWindows2000SP4を充てるかのどちらかで、
SP4を充ててみたところ無事に解決しました。

Mutexを使っていればこんなことにはまらなかったのだろうか、と思ったりするこの頃です。

photo
takayama