- 題名: プログラムの二重起動について
- 日時: 2007/01/17 12:09:25
- ID: 18799
- この記事の返信元:
- (なし)
- この記事への返信:
- [18800] Re[1]: プログラムの二重起動について2007/01/17 12:20:40
- ツリーを表示
■No18803に返信(ぽぴ王子さんの記事)
ありがとうございます。
Protected Shared Sub Main()
Dim Loc_Path As String
Loc_Path = Application.ExecutablePath
If My.Computer.FileSystem.FileExists(Loc_Path) = True Then
Dim hMutex As New System.Threading.Mutex(True, Application.ExecutablePath)
If hMutex.WaitOne(0, False) = True Then
Application.Run(New Form1())
End If
GC.KeepAlive(hMutex)
hMutex.Close()
End If
End Sub
で試してみましたが、Application.ExecutablePathがSystem.IO.DirectoryNotFoundExceptionでエラーになります。
Dim hMutex As New System.Threading.Mutex(True, Application.ExecutablePath)
の記述に問題があるのでしょうか?
■No18808に返信(じゃんぬねっとさんの記事)
> 変換するならば、パスとして使用できない文字が望ましいです。
> ('/', など)
なるほど。確かにそうですね。
_ に変換してしまうと
C:\aa\bb.exe と
C:\aa_bb.exe が
同一として見なされてしまいますからね。
フォローありがとうございます。
分類:[.NET]
VB.NETでプログラムを開発しており、プログラムの二重起動で苦戦致しております。
当掲示板に掲載がありました、
Function PrevInstance() As Boolean
If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
Return True
Else
Return False
End If
End Function
で二重起動は防止できるのですが、同じプロブラムIDのプログラムを
(例)
C:\TEST\test.exe
C:\TEST1\test.exe
と同一端末内の複数箇所にセットした場合、上記処理では全ての処理が起動不可となります。
Process.GetCurrentProcess.MainModule.FileNameで起動場所(C:\TEST\test.exe)は取得できるのですが、判断方法が分かりません。
どなたかご存知ないでしょうか?