从计算机名称中删除域名

时间:2012-08-01 13:33:43

标签: c#

有没有一种安全的方法可以从C#中的机器名中删除域名?

示例:

MYMACHINE.mydomain.com

应该解决

MYMACHINE

2 个答案:

答案 0 :(得分:2)

朴素字符串方法:

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

答案 1 :(得分: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. 将大部分配置数据存储在中央位置。这样,应用程序只需要知道从中检索它的配置(即使它本身就是这样)。