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());
}
}app
// ******************* 防止程序屢次執行 **************************
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
);
}ui