0

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

例子:

MYMACHINE.mydomain.com

应该解决

机器

4

2 回答 2

3

朴素的字符串方法:

string fullName = "MYMACHINE.mydomain.com";
string resolvedMachineName = fullName.Split('.')[0];
于 2012-08-01T13:35:21.677 回答
2

如果您想对机器名称进行“基本”理解,请使用:

Environment.MachineName

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


编辑#1
@Antineutrino - 当我重新阅读我的答案时,我意识到我们没有足够的信息来给你一个正确的答案。但是,当您说“机器名称”时,不清楚您是想知道如何解析您拥有的字符串,还是想知道如何以正确的方式检索您想要的内容。如果您只是想知道如何解析字符串,那么其他答案都是正确的。另一方面...

  • 您想要 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可以在 build/deployment 上进行转换,或者只是在一台服务器上手动修改。

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

于 2012-08-01T13:37:03.867 回答