Como obtenho o nome do computador no .NET


285

Como obtenho o nome do computador no .NET c #

c#  .net 


1
@ Malachi, essa pergunta é sobre serviços do Windows.
Sam

2
@ Sam um serviço do Windows é apenas um aplicativo do Windows que é executado em segundo plano, então realmente é a mesma coisa.
Malachi

@ Malachi, sim, eu sei o que você quer dizer. No entanto, acho que as referências às maneiras específicas de ASP.NET e WinForms de fazer isso nas respostas a essa pergunta podem não se aplicar nessa pergunta.
Sam

1
@ Malachi, acho que você não entendeu o que eu quis dizer sobre ASP.NET. Eu não estava me referindo a um aplicativo ASP.NET que obtinha os nomes de computadores de seus clientes, embora isso seja feito (para o nome DNS) provavelmente seja fácil, pois o aplicativo obteria os endereços IP dos clientes. Eu estava me referindo aos aplicativos ASP.NET obtendo os nomes dos computadores host. Veja a resposta mais bem avaliada aqui para um exemplo.
Sam

Respostas:


400

Consulte Como encontrar o FQDN da máquina local em C # /. NET? se o último não fornecer o FQDN e você precisar dele.

Consulte os detalhes sobre a diferença entre SystemInformation.ComputerName, Environment.MachineName e Net.Dns.GetHostName


3
@tvanfosson: qual é a diferença? Quero dizer, qual devo usar quando? Isso tem implicações de segurança?
PK

26
Eu usaria o primeiro de um aplicativo de console ou winforms, o segundo de um aplicativo da Web e o terceiro se precisasse obter o FQDN. Consulte a documentação referenciada para obter informações sobre as permissões necessárias.
Tvanfosson

1
@tvanfosson Todos esses três me dão o nome do servidor e não a máquina do cliente que está acessando a página. É assim que funciona? ou estou fazendo algo incorretamente. Gostaria de obter a máquina dos clientes, e não o servidor. Eu estou usando Web Forms com asp.NET 4.0
Ryan S

2
Acabei de testar isso e descobri que Dns.GetHostName() não deu o nome completo.
Sam

5
Observe que System.Enviornment.MachineName fornecerá apenas o nome NetBIOS; portanto, se o nome do host tiver mais de 15 caracteres, você terá problemas se precisar do nome completo. Eu não posso falar pelos outros.
RandomInsano 27/01

78

System.Environment.MachineName

Ou, se você estiver usando o Winforms, poderá usar o System.Windows.Forms.SystemInformation.ComputerNameque retorna exatamente o mesmo valor que System.Environment.MachineName.



23

Alguns métodos são fornecidos abaixo para obter o nome da máquina ou o nome do computador

Método 1:-

string MachineName1 = Environment.MachineName;

Método 2: -

string MachineName2 = System.Net.Dns.GetHostName();

Método 3: -

string MachineName3 = Request.ServerVariables["REMOTE_HOST"].ToString();

Método 4: -

string MachineName4 = System.Environment.GetEnvironmentVariable("COMPUTERNAME");

Para mais veja meu blog


22
string name = System.Environment.MachineName;


15

Bem, há mais uma maneira: Instrumentação de Gerenciamento do Windows

using System.Management;

try
        {
            ManagementObjectSearcher searcher =
                new ManagementObjectSearcher("root\\CIMV2",
                "SELECT Name FROM Win32_ComputerSystem");

            foreach (ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Win32_ComputerSystem instance");
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Name: {0}", queryObj["Name"]);
            }
        }
        catch (ManagementException e)
        {
            // exception handling
        }

MSDN

WMI

Criador de código WMI

Perguntas frequentes


4

Tente o seguinte:

string[] computer_name = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
return computer_name[0].ToString();

1
Nome DNS e nome do computador podem ser diferentes. Ele está pedindo o nome do computador!
Marsh-wiggle #

4

Defino o .InnerHtml de um <p>suporte para meu projeto da web como o nome do computador do usuário, fazendo o seguinte:

HTML:

    <div class="col-md-4">
       <h2>Your Computer Name Is</h2>
       <p id="pcname" runat="server"></p>
       <p>
           <a class="btn btn-default" href="#">Learn more &raquo;</a>
       </p>
    </div>

C #:

using System;
using System.Web.UI;

namespace GetPCName {
   public partial class _Default : Page {
    protected void Page_Load(object sender, EventArgs e) {            
        pcname.InnerHtml = Environment.MachineName;
    }
   }
}

1

2 métodos mais úteis: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName") para obter o nome do PC do usuário se ele estiver conectado via Citrix XenApp ou Terminal Services (aka RDS, RDP, Remote Desktop)


1

Tente este.

public static string GetFQDN()
{
    string domainName = NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName;
    string hostName = Dns.GetHostName();
    string fqdn;
    if (!hostName.Contains(domainName))
        fqdn = hostName + "." +domainName;
    else
        fqdn = hostName;

    return fqdn;
}

Mas por que não usar System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName?
Osexpert #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.