DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB.NETでの二重起動をチェック

環境/言語:[VB.NET]
分類:[.NET]

下記サイトの二重起動をチェックですが
http://dobon.net/vb/dotnet/process/checkprevinstance.html

'二重起動をチェックする
If UBound(System.Diagnostics.Process.GetProcessesByName( _
  System.Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
  'すでに起動していると判断する
  MessageBox.Show("多重起動はできません。")
End If

同一プロセスが起動している場合、UBoundで0が返ってきてしまい
多重起動してしまいます。

C#同様、Lengthで判断した方がいいと思います。
ご指摘ありがとうございます。確かにLengthプロパティを使った方がよいと思いますので、そのことを記述しておきたいと思います。

ただ、お恥ずかしい話、UBoundではうまくいかないが、Lengthではうまくいくというケースが理解できていません。(同じ名前のプロセスがすでに起動していれば、自分と合わせて2つのプロセスが起動していることになりますので、UBoundで1が返り、Lengthで2が返ると思うのですが。)よろしければ詳しく教えていただけないでしょうか?
■No24711に返信(管理人さんの記事)
> ご指摘ありがとうございます。確かにLengthプロパティを使った方がよいと思いますので、そのことを記述しておきたいと思います。

> ただ、お恥ずかしい話、UBoundではうまくいかないが、Lengthでは
> うまくいくというケースが理解できていません。

失礼しました、原因が分かりました。
私の勘違いがあったため、UBoundでも問題ないと思います。

実はメニュー画面から、指定のEXE形式のプログラムを起動するようにして
おり、下記のようなプログラムにしておりました。
各EXEのエントリポイントでは、実行しておりませんでした。

'二重起動をチェックする
Dim processName As String = "WindowsApplication1"
If UBound(System.Diagnostics.Process.GetProcessesByName(processName)) > 0 Then
'すでに起動していると判断する
MessageBox.Show("多重起動はできません。")
Return
End If
Process.Start(processName & ".exe")
解決済みとします。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板