VC中如何讓一個應用程序只啓動一次

方法一:使用#pragma data_seg

步驟一:在應用程序的入口文件前面加上如下語句

#pragma data_seg("flag_data")
int g_Count = 0; //共享數據必須初始化,否則微軟編譯器會把沒有初始化的數據放到.BSS段中,從而導致多個進程之間的共享行爲失敗。
#pragma data_seg()
#pragma comment(linker,"/SECTION:flag_data,RWS")

步驟二:在程序啓動的地方加上如下語句:

if(g_Count > 0)
{
MessageBox(NULL, "已經啓動一個應用程序", "Warning", MB_OK);
return FALSE;
}
g_Count++;

這樣,就可以限制程序只啓動一次了。


方法二:使用互斥量CreateMutex

步驟一:在聲明文件中聲明實例變量,在MFC中對應爲CxxxAPP類中

HANDLE appInstance;

步驟二:在實現文件中添加如下代碼,對應MFC中的CTKToolsApp::InitInstance()函數中

SECURITY_ATTRIBUTES sa;

sa.bInheritHandle = TRUE;
sa.nLength= sizeof(sa);
sa.lpSecurityDescriptor = NULL;

appInstance = CreateMutex(&sa, FALSE, UNIQUE_NAME); //UNIQUE_NAME爲定義的宏,此處也可以使用字符串
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL, "程序已經啓動,不能重複運行!", "提示信息", MB_ICONWARNING|MB_OK);
CloseHandle(appInstance);
appInstance = NULL;
return FALSE;
}


發佈了31 篇原創文章 · 獲贊 16 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章