.NET Compact Framework(VB.NET)で二重起動防止(Mutexを利用)する方法 - Lunarfactory
ここのコードを、そのまま利用しました。ありがとうございます。
しかし、エントリポイントに処理が入らない。
と思ったら設定がありました。
スタートアップオブジェクトをForm1 から Sub Main に変更しました。画像中央です。
Option Strict Option Explicit Imports System Imports System.Runtime.InteropServices Public Class clsAppMain <DllImport("CoreDll.Dll", SetLastError:=True)> _ Public Shared Function CreateMutex(ByVal Attr As IntPtr, ByVal Own As Boolean, ByVal Name As String) As IntPtr End Function <DllImport("CoreDll.Dll", SetLastError:=True)> _ Public Shared Function ReleaseMutex(ByVal hMutex As IntPtr) As Boolean End Function <DllImport("CoreDll.Dll", SetLastError:=True, CallingConvention:=CallingConvention.Winapi, CharSet:=CharSet.Auto)> _ Private Shared Function CloseHandle(ByVal hObject As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean End Function Sub Main() '------------------------------------------ ' 二重起動の確認 '------------------------------------------ Const ERROR_ALREADY_EXISTS As Long = 183 '既に起動してるよというエラーコードはこの内容で帰ってくる Dim mutexHandle As IntPtr = IntPtr.Zero Dim myName As String = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name Try mutexHandle = CreateMutex(IntPtr.Zero, True, myName) If Marshal.GetLastWin32Error() = ERROR_ALREADY_EXISTS Then 'Mutexにより、二重起動時の処理はここに飛んでくる Else 'Mutexにより、二重起動じゃない時の処理はここに飛んでくる '-----------------プログラムの開始 'プログラムの本体はここに書いていく 'お好みでMain()の引数等は処理してください。 '-----------------プログラムの終了 End If Catch ex As Exception Call clsCmn_Tools.gs_FindError(ex, "Sub Main", "", mcstr_LogFile) End Try ReleaseMutex(mutexHandle) CloseHandle(mutexHandle) End Sub End Class