2010-09-07 70 views
1

我想爲桌面應用程序製作.exe,它只能在整個生活中使用一次。沒有人可以運行它兩次。如何使單個系統(機器)的Windows應用程序

+2

據我所知,你希望每個用戶只運行一次。我不認爲這是可能的。用戶可以擁有多臺計算機或虛擬機設置,並且可以運行多次。你可以使用某種序列號,但這也是易碎的(關於序列號有很多問題,你可以看到它的優點和缺點) – Rox 2010-09-07 11:29:35

+0

用戶只有計算機,它只能在同一系統中運行,不能在其他系統中運行。 – abu 2010-09-07 11:31:23

+1

簡單:[寫skynet](http://xkcd.com/534/)...只需要其中一個,* poof *沒有更多的世界。 – 2010-09-07 11:36:09

回答

5

你不能做到這一點可靠。

你可以嘗試一些簡單的東西,比如在註冊表中寫一個魔術鍵或者在某處存儲一個魔法文件,但是像Process Monitor這樣的簡單工具會向任何具有Google技能的人展示你的魔法標記。

您可以嘗試刪除當它被終止.exe文件,但如果用戶進行復印時,他們執行你的文件之前,您再次鬆動。

你可以寫一個根工具包,阻止系統啓動了應用程序的兩倍,但不是非常好,它可以檢測並規避了。

您可以創建一個在線服務,而您的應用需求檢查一次性許可來執行,但可以破解,你會得到一個時間牌弄得一塌糊塗保持跟蹤。

但到最後,如果有人真的想要運行的應用程序超過一次,他們將弄清楚如何做到這一點。

你想要多少保護?

1

當它退出時刪除它自己嗎?

+1

更好的是,刪除一次完全加載。這幾乎是我說的唯一方法。 – tdammers 2010-09-07 11:32:46

+0

在第一次運行之前無法複製exe文件,因此備份將始終可用? – Rox 2010-09-07 11:33:12

+0

這不是一個答案...投票下來......-我從我的 – t0mm13b 2010-09-07 11:35:16

0

你所談論的是一個單實例應用程序,可以啓動,並沒有其他的副本可以運行 - 單實例啓動代碼的基礎是創建一個互斥體,如果另一個副本運行時,它會檢查如果分配了互斥鎖,如果它已經被釋放並立即退出。看看這篇關於CodeProject的文章,它正是你想要的。

+1

「一生只用過一次,沒人能跑兩次。」 - 由此我明白,他不希望程序在第一次運行後再次啓動。 – Rox 2010-09-07 11:36:35

+0

@Rox:這是使用系統分配的全局互斥鎖的想法......一旦分配完畢,就是這樣......沒有其他副本可以運行...... – t0mm13b 2010-09-07 11:38:50

+1

「整個生活」中暗示這並不完全OP的意圖是什麼。 – 2010-09-07 11:39:30

0

可以使用DPAPI調用的組合(ProtectedData Class)將值推入註冊表中以再次檢查,或者在第一次運行時對值進行編碼,並檢查結果是否與您打算使用的機器匹配運行(如果沒有則退出)。

參見DataProtectionScope.LocalMachine。受保護數據的結果在每臺機器上幾乎總是不同,因此這可以作爲特定機器檢查。

0

您可以創建一個註冊表項。如果該鍵存在中止執行。

相關問題