2012-08-01 156 views

回答

2

樸素字符串處理方法:

string fullName = "MYMACHINE.mydomain.com"; 
string resolvedMachineName = fullName.Split('.')[0]; 
+0

所以,我必須解析字符串才能找出? – Antineutrino 2012-08-01 13:38:21

+0

@Authutrino我假設你已經有了一個全名,字符串是如何存儲的? – James 2012-08-01 13:39:12

+0

值得注意的是,這種方法假設你總是有三部分路徑。如果域名與MYMACHINE.mydomain.co.uk相似,那麼它會破壞你的邏輯。 – Sam 2012-08-01 13:39:57

2

如果你想機器名的「基本」的理解,然後使用:

Environment.MachineName 

它提供的機器名稱不帶域(傳統上在命令提示符下COMPUTERNAME變量)。請參閱:http://msdn.microsoft.com/en-us/library/system.environment.machinename.aspx


編輯#1
@Antineutrino - 正如我重新閱讀我的答案,我意識到,我們沒有足夠的信息給你一個正確的答案。然而,當你說'機器名稱'時,你是否想知道如何解析你所擁有的字符串,或者找到你想要的東西的正確方法並不清楚。如果你只是想知道如何解析一個字符串,其他答案是正確的。另一方面...

  • 您是否想要NetBios名稱或羣集名稱?然後Environment.MachineName

  • 您是否想要運行集羣的計算機的基礎名稱?你需要dig into the WMI classes

  • 是否想要解析爲當前計算機的所有DNS字符串中的最具體名稱?即來自web1.mysite.com的web1?您需要登錄resolve all the IP's bound to the machine

如果你回去編輯/修改你的問題並提供更多的細節 - 你會得到更好/更具體的答案。


編輯#2
如果我理解正確的話,你的場景如下:您有在桌面環境中的客戶端和服務器的機器上運行類似的代碼。在所有機器註冊表中,您已爲服務器保存了一個DNS名稱(server.myapp.com)。現在在你想要確定一臺機器是否是服務器的代碼中。

你問對於

string serverName  = Registry.GetValue(REG_KEY, REG_VALUE, "key missing"); 
string currentMachine = Environment.MachineName; 

if (currentMachine.ToLower() == serverName.ToLower().Split('.')[0]) { 
    //do something fancy 
}; 

另一個想法
反而萎縮的服務器名稱,你可以長的機器名。

string serverName  = Registry.GetValue(REG_KEY, REG_VALUE, "key missing"); 
string currentMachine = Environment.MachineName + 
         Environment.GetEnvironmentVariable("USERDNSDOMAIN"); 

if (currentMachine.ToLower() == serverName.ToLower()) { 
    //do something fancy 
}; 

可能

分發註冊表項什麼似乎有點麻煩。如果是我,我可能會做一個/一些/許多如下:

  1. 創建不同的構建配置和使用pre-processor directives更改代碼。非常粗略的東西:#if(RELEASE_SERVER) { /*do server code*/} #if(RELEASE_CLIENT) { /*do server code*/}

  2. 使用app.config ---這就是它存在的配置數據。無需污染註冊表。 app.config can be transformed on build/deployment,或在一臺服務器上手動修改。

  3. 將大部分配置數據存儲在中央位置。這樣,應用程序只需要知道是從哪裏檢索它的配置(即使它本身)。

+1

+1爲了試圖解決OP所需要的,而不是他認爲他想要的東西 – James 2012-08-01 13:57:09

+0

我經常發現自己希望人們能夠/幫助我想要什麼,而不是我所要求的:-D – EBarr 2012-08-01 13:58:09

+0

@EBar:我想具有由Environment.MachineName返回的值。 – Antineutrino 2012-08-01 14:00:15