有没有一种安全的方法可以从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
};
您可能想要什么
分发注册表项似乎有点麻烦。如果是我,我可能会做下面的一个/一些/很多:
创建不同的生成配置,并使用预处理器指令来更改代码。大致类似:
#if(RELEASE_SERVER) { /*do server code*/} #if(RELEASE_CLIENT) { /*do server code*/}
使用app.config——这就是它用来存储配置数据的地方。无需污染注册表。app.config可以在构建/部署时转换,也可以在一台服务器上手动修改。
将大部分配置数据存储在中心位置。这样,应用程序只需要知道是从中检索它的配置(即使是它自己)。