有没有一种安全的方法可以从C#中的机器名中删除域名?
示例:
MYMACHINE.mydomain.com
应该解决
MYMACHINE
答案 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
};
可能想要的
分发注册表项似乎有点麻烦。如果是我,我可能会做一个/一些/多个以下的事情:
创建不同的构建配置并使用pre-processor directives更改代码。非常类似于:#if(RELEASE_SERVER) { /*do server code*/} #if(RELEASE_CLIENT) { /*do server code*/}
使用app.config ---它就是存储配置数据的地方。无需污染注册表。 app.config can be transformed on build/deployment,或者只是在一台服务器上手动修改。
将大部分配置数据存储在中央位置。这样,应用程序只需要知道从中检索它的配置(即使它本身就是这样)。