C#防止プログラムの複数回実行
5369 ワード
私のテストを経て、まだ使いやすいですが、ログアウトせずに別のユーザーで入ると、プログラムが実行されたと判断できない問題があります.したがって,単一ユーザ環境に限られているが,まだ完璧ではない.
出典:http://blog.csdn.net/lanman/article/details/3648455
class Program
{
[STAThread]
static void Main(string[] args)
{
//
if (!OneInstance.IsFirst("MyTest"))
{
Console.WriteLine(" : ! ! !");
return;
}
Console.WriteLine(" ");
Console.ReadLine();
}
}
public static class OneInstance
{
///<summary>
///
///</summary>
///<param name="appId"> </param>
///<returns> True, False</returns>
public static bool IsFirst(string appId)
{
bool ret = false;
if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)
{
CreateMutex(IntPtr.Zero, 0, appId);
ret = true;
}
return ret;
}
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr OpenMutex(
uint dwDesiredAccess, // access
int bInheritHandle, // inheritance option
string lpName // object name
);
[DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr CreateMutex(
IntPtr lpMutexAttributes, // SD
int bInitialOwner, // initial owner
string lpName // object name
);
}
出典:http://blog.csdn.net/lanman/article/details/3648455