2013-04-27 48 views
2

我正在製作一個WCF應用程序,我只想在連接到服務器的用戶上添加一些額外的信息。它不一定是唯一的ID。生成一個PC ID(不需要是唯一的+不需要管理員)

我真的很想要簡單的東西。這會工作嗎?

static UserInfo() // d-constructor 
     { 

      MachineID = Environment.MachineName; 
      MachineID = MachineID + Convert.ToString(Environment.OSVersion); 
      MachineID = MachineID + Environment.ProcessorCount; 
      MachineID = MachineID + Environment.UserName; 
      MachineID = MachineID + Environment.Version; 
     } 
+1

你試過嗎?它有用嗎? – erikkallen 2013-04-27 08:50:44

+1

@erikkallen我不問實際的代碼是否有效。我問的是如果我正在使用正確的方式來實現這一點。也許還有其他一些班(除Enviroment外)? – xperator 2013-04-27 08:57:38

+1

您的問題中唯一的問號是在「將這項工作」一詞之後。 – erikkallen 2013-04-27 09:18:24

回答

3

當然,這將工作。我在LINQPad 4簽入很快,它又回來了罰款:

MYMACHINEMicrosoft的Windows NT 6.1.7601服務包14myuser4.0.30319.296

你可能會考慮用下劃線或類似的東西代替空格如果你希望字符串是自由的空間 - 也許......

MachineID = MachineID.Replace(' ', '_'); 

...添加到您的UserInfo()方法結束。

更新:下面

跟隨評論,Windows 7 Help Forums有簡單的步驟做一個快捷方式來運行一個命令,一個特定的用戶:測試我設置一個快捷方式運行cmd.exe非管理員用戶myuser,我爲此目的創建的。再次,我在這裏的測試是從命令行運行setsysteminfo作爲myuser - 通過類比測試,但我認爲是足夠的。

UPDATE:

爲了進一步跟進,我創建了另一個快捷方式運行LINQPad 4作爲非管理員用戶myuser,然後重新運行該代碼:沒有problemo測試這種方式太。我打算取悅。 :)

+1

所以它不需要任何管理員權限?我認爲只有MachineName和Processorcount具有更高的唯一性,對嗎?有沒有其他的課程可以獲得更多信息? – xperator 2013-04-27 08:54:43

+0

我剛加倍檢查了需要管理權限的可能性:nope,作爲非管理員用戶都很好。這是有道理的,因爲在命令行方面,你實際上只是獲取'set'和'systeminfo'提供的信息。現在,也許一項政策(例如在AD域中)可能會以非管理員身份阻止運行;但作爲非管理員用戶運行本身不會導致您獲取指定的環境信息時出現問題。 – J0e3gan 2013-04-27 09:00:56

+1

我不知道'ProcessorCount'會增加很多,除非您正在處理可能有名稱衝突的機器的請求(例如> 1臺機器名爲MYMACHINE)。 IP地址可能值得考慮,但這取決於您的使用情況。 'MachineName'和'UserName'應該可以獲得所需的大部分內容(即「(不需要是唯一的+不需要管理員)」)。 – J0e3gan 2013-04-27 09:08:57