从计算机名称中删除域名



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

示例:

MYMACHINE.mydomain.com

应解析为

MYMACHINE

朴素字符串方法:

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

如果您想对机器名称有"基本"的了解,请使用:

Environment.MachineName

它提供了不带域的机器名称(传统上是在命令提示符下的COMPUTERNAME变量)。请参阅:http://msdn.microsoft.com/en-us/library/system.environment.machinename.aspx


编辑#1
@反中微子——当我重读我的答案时,我意识到我们没有足够的信息给你一个正确的答案。然而,当你说"机器名称"时,不清楚你是想知道如何解析你所拥有的字符串,还是想知道检索你想要的东西的正确方法。如果您只是想知道如何解析字符串,那么其他答案都是正确的。另一方面

  • 您想要NetBios名称还是群集名称?然后Environment.MachineName

  • 您想要运行群集的计算机的基础名称吗?您需要深入研究WMI类。

  • 是否要从解析到当前计算机的所有DNS字符串中选择最具体的名称?即来自web1.mysite.com的web1?您需要解析所有绑定到机器的IP。

如果你回过头来,用更多的细节编辑/修改你的问题,你会得到更好/更具体的答案。


编辑#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. 创建不同的生成配置,并使用预处理器指令来更改代码。大致类似:#if(RELEASE_SERVER) { /*do server code*/} #if(RELEASE_CLIENT) { /*do server code*/}

  2. 使用app.config——这就是它用来存储配置数据的地方。无需污染注册表。app.config可以在构建/部署时转换,也可以在一台服务器上手动修改。

  3. 将大部分配置数据存储在中心位置。这样,应用程序只需要知道是从中检索它的配置(即使是它自己)。

最新更新