2010-04-27 49 views
9

我即將爲我的應用程序實現非常基本的許可功能。序列號可以授予每臺計算機(或每個操作系統)或每個用戶(對於Windows Server中的CAL:如果我的應用程序由多臺用戶在一臺機器上使用,或者一臺用戶使用多臺機)。每個機器/每個用戶的.NET應用程序許可

  1. 對於每個操作系統的許可,我使用的SerialNumber的Win32_OperatingSystem

  2. 對於每個用戶的許可,我使用:

    WindowsIdentity currentIdentity = WindowsIdentity.GetCurrent(); 
    if (currentIdentity != null) 
    { 
        SecurityIdentifier userSid = currentIdentity.User.AccountDomainSid; 
        Console.WriteLine(userSid); 
    } 
    

獲得的OS的序列號的哈希或然後SID被存儲在數據庫中,與申請系列相關聯;每次程序啓動時,它都會查詢服務器,發送OS SN/SID和應用程序序列的散列。

這是做對了還是完全錯了?它可以在每臺Windows機器上運行嗎? (例如,using motherboard serial is wrong

+0

對我來說聽起來不錯,我一直在使用通過WMI的硬件ID散列作爲工作中的一個項目。切記不要假定任何硬件ID的格式 - 我看過編寫代碼導致的錯誤,假定返回的字符串不返回空格和內容。 – anonymous 2010-04-28 03:44:53

+0

好吧,看到觀看次數和沒有其他答覆的事實,我得出結論說我的方法並非完全錯誤。 @Mr羅伊斯,也許你可以促進你的評論一個答案,所以我會能夠接受它? – 2010-04-28 20:36:27

+0

您可能還想查看使用虛擬環境的場景。它仍然會產生獨特的操作系統s/n?我知道這不是一個答案..但不能在這裏添加評論.. – 2010-04-29 02:59:58

回答

2

我沒有看到你的方法有什麼問題,因爲我已經看到類似的方法在工作中使用 - 但是我們使用OS S/N和硬件ID的組合來進行機器許可。我們的應用程序沒有每個用戶的許可,所以我不能就此提供建議。

請注意,你不應該假設,通過WMI返回的值是在任何特定的格式(Win32_OperatingSystem應該OK,硬件ID不一定OK)

我遇到的錯誤,其中的代碼接受硬件ID採用了特定的格式,並未考慮非字母數字字符(如逗號和空格)的存在。

相關問題