確保你的程序只有一個進程實例在運行有很多種方法,利用共享數據段的方法最簡單方便。
一個EXE文件是有不同的段(Section)組成的,其中有若干代碼段和若干數據段。在默認情況 下,操作系統為了確保每個進程實例在安全環境中運行會為每個進程實例創建自己的數據段的 拷貝,這樣多個進程實例就不會因為一個實例修改了數據段的內容而影響到另外的進程實例。 但是我們也可以為EXE創建共享數據段,這樣多個進程實例就可以共享這個數據段而不會擁有自 己的拷貝。
因此我們可以在共享數據段裡存放一個變量來表示目前進程實例的數量,從而實例我們的目 標。
創建共享數據段的方法是使用編譯器指令:
#pragma data_seg("Shared)
unsigned long g_InstanceCount = 0;
#pragma data_seg()
這樣就在EXE文件中創建了一個共享數據段,裡面只存放一個變量g_InstanceCount,所有的 進程實例都可以訪問並修改這個變量。
然後還應該告訴鏈接器該數據段的屬性:
#pragma comment(linker,"/SECTION:Shared,RWS")
這段代碼是在鏈接時給鏈接器的附加命令:/SECTION:Shared,RWS。RWS表示這個數據段的屬 性是:可讀(Read)、可寫(Write)、共享(Share)。
然後在你的程序入口點你可以訪問g_InstanceCount 來獲取當前進程實例的數量,例如:
#pragma data_seg("Shared)
unsigned long g_InstanceCount = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:Share,RWS")
int main()
{
++g_InstanceCount;
if(g_InstanceCount > 1)
{
exit(0);
}
//your normal code here
}