Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从计算机名中删除域名_C# - Fatal编程技术网

C# 从计算机名中删除域名

C# 从计算机名中删除域名,c#,C#,有没有一种安全的方法可以从C#中的机器名中删除域名 示例: MYMACHINE.mydomain.com 应决心 MYMACHINE原始字符串方法: string fullName = "MYMACHINE.mydomain.com"; string resolvedMachineName = fullName.Split('.')[0]; 朴素的字符串方法: string fullName = "MYMACHINE.mydomain.com"; string resolvedMachineN

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

示例:

MYMACHINE.mydomain.com

应决心

MYMACHINE

原始字符串方法:

string fullName = "MYMACHINE.mydomain.com";
string resolvedMachineName = fullName.Split('.')[0];
朴素的字符串方法:

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

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

Environment.MachineName
它提供不带域的机器名(通常在命令提示下为
COMPUTERNAME
变量)。见:


编辑#1
@反中微子-当我重新阅读我的答案时,我意识到我们没有足够的信息给你一个正确的答案。但是,当您说“machinename”时,不清楚您是想知道如何解析您拥有的字符串,还是想知道检索所需内容的正确方法。如果您只是想知道如何解析字符串,那么其他答案都是正确的。另一方面

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

  • 您想要运行群集的计算机的基础名称吗?你需要这样做

  • 是否要从解析到当前计算机的所有DNS字符串中获取最具体的名称?i、 e.从web1.mysite.com下载web1?你需要这样做

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


编辑#2
如果我理解正确的话,您的场景如下:在桌面环境中,您拥有在客户端和服务器计算机上运行的类似代码。在所有计算机注册表中,您已为服务器保存了DNS名称(server.myapp.com)。现在在代码中,您要确定机器是否是服务器

你要什么

另一个想法
您可以增加机器名,而不是缩小服务器名

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,或者只是在一台服务器上手动修改

  • 将大部分配置数据存储在中心位置。这样,应用程序只需要知道从何处检索其配置(即使是它本身)


  • 如果您想对机器名有“基本”的了解,请使用:

    Environment.MachineName
    
    它提供不带域的机器名(通常在命令提示下为
    COMPUTERNAME
    变量)。见:


    编辑#1
    @反中微子-当我重新阅读我的答案时,我意识到我们没有足够的信息给你一个正确的答案。但是,当您说“machinename”时,不清楚您是想知道如何解析您拥有的字符串,还是想知道检索所需内容的正确方法。如果您只是想知道如何解析字符串,那么其他答案都是正确的。另一方面

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

    • 您想要运行群集的计算机的基础名称吗?你需要这样做

    • 是否要从解析到当前计算机的所有DNS字符串中获取最具体的名称?i、 e.从web1.mysite.com下载web1?你需要这样做

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


    编辑#2
    如果我理解正确的话,您的场景如下:在桌面环境中,您拥有在客户端和服务器计算机上运行的类似代码。在所有计算机注册表中,您已为服务器保存了DNS名称(server.myapp.com)。现在在代码中,您要确定机器是否是服务器

    你要什么

    另一个想法
    您可以增加机器名,而不是缩小服务器名

    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,或者只是在一台服务器上手动修改

  • 将大部分配置数据存储在中心位置。这样,应用程序只需要知道从何处检索其配置(即使是它本身)


  • 所以,我必须解析字符串才能找到答案?@Antineutrino我假设您已经将全名存储为字符串,您是如何将其存储的?值得注意的是,这种方法假设您总是有一个由三部分组成的路径。如果域类似于MYMACHINE.mydomain.co.uk,它将破坏您的逻辑。@Sam怎么会这样?它获取以句点分隔的元素字符串中的第一个元素。直接索引第一个元素是安全的,因为split始终至少包含一个元素element@James:我只有域名作为后缀的字符串。因此,我必须分析字符串才能找到?@Antineutrino我假设您已经将全名存储为字符串,您是如何存储它的?值得注意的是,这种方法假设您总是有一条由三部分组成的路径。如果域类似于MYMACHINE.mydomain.co.uk,它将破坏您的逻辑。@Sam怎么会这样?它获取以句点分隔的元素字符串中的第一个元素。直接索引第一个元素是安全的,因为split始终至少包含一个元素element@James:IO