static class Program
{
/// <summary>
///
应用程序的主入口点。
/// </summary>
[STAThread]
static void
Main()
{
//防止程序多次运行
if
(!OneInstance.IsFirst("GetPayInfo"))
{
MessageBox.Show("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!", "程序错误提示:",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
// ******************* 防止程序多次执行 **************************
public
abstract 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;
}
/// <summary>
/// 为现有的一个已命名互斥体对象创建一个新句柄
///
</summary>
/// <param
name="dwDesiredAccess"></param>
/// <param
name="bInheritHandle">如希望子进程能够继承句柄,则为TRUE</param>
///
<param name="lpName">要打开对象的名字</param>
///
<returns></returns>
[DllImport("Kernel32.dll", CharSet =
CharSet.Auto)]
private static extern IntPtr OpenMutex(
uint dwDesiredAccess, // access
int bInheritHandle, //
inheritance option
string lpName // object name
);
/// <summary>
/// 找出当前系统是否已经存在指定进程的实例。
///
如果没有则创建一个互斥体。
/// CreateMutex()函数可用来创建一个有名或无名的互斥量对象:
///
</summary>
/// <param
name="lpMutexAttributes">指向安全属性的指针</param>
/// <param
name="bInitialOwner">初始化互斥对象的所有者</param>
/// <param
name="lpName">指向互斥对象名的指针</param>
///
<returns></returns>
[DllImport("Kernel32.dll", CharSet =
CharSet.Auto)]
private static extern IntPtr CreateMutex(
IntPtr lpMutexAttributes, // SD
int bInitialOwner,
// initial owner
string lpName
// object name
);
}