Compact Framework3.5 で アプリケーションの多重起動を防止する

.NET Compact Framework(VB.NET)で二重起動防止(Mutexを利用)する方法 - Lunarfactory

ここのコードを、そのまま利用しました。ありがとうございます。

 

しかし、エントリポイントに処理が入らない。

と思ったら設定がありました。

f:id:hsmtblue:20171207105612p:plain

スタートアップオブジェクトを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