¿Cómo obtengo el nombre de la computadora en .NET?

285

¿Cómo obtengo el nombre de la computadora en .NET c #


fuente
Enlace de
Malachi
1
@Malachi, esa pregunta es sobre los servicios de Windows.
Sam
2
@Sam un servicio de Windows es solo una aplicación de Windows que se ejecuta en segundo plano, por lo que realmente es lo mismo.
Malaquías
@Malachi, sí, sé a qué te refieres. Sin embargo, creo que las referencias a las formas específicas de ASP.NET y específicas de Winforms de hacer esto en las respuestas a esta pregunta podrían no aplicarse en esa pregunta.
Sam
1
@Malachi, creo que has entendido mal lo que quise decir con ASP.NET. No me refería a una aplicación ASP.NET que obtuviera los nombres de computadora de sus clientes, aunque hacerlo (para el nombre DNS) probablemente sea fácil ya que la aplicación obtendría las direcciones IP de los clientes. Me refería a las aplicaciones ASP.NET que obtienen los nombres de sus computadoras host. Vea la respuesta mejor calificada aquí para ver un ejemplo.
Sam

Respuestas:

400

Consulte ¿Cómo encontrar el FQDN de la máquina local en C # /. NET? si el último no le proporciona el FQDN y lo necesita.

Ver detalles sobre la diferencia entre SystemInformation.ComputerName, Environment.MachineName y Net.Dns.GetHostName

tvanfosson
fuente
3
@tvanfosson: ¿cuál es la diferencia? Quiero decir, ¿cuál debo usar cuando? ¿Tiene esto alguna implicación de seguridad?
PK
26
Usaría el primero desde una consola o aplicación winforms, el segundo desde una aplicación web y el tercero si necesitara obtener el FQDN. Consulte la documentación referenciada para obtener información sobre los permisos requeridos.
tvanfosson
1
@tvanfosson Todos estos tres me dan el nombre del servidor y no la máquina del cliente que está accediendo a la página. ¿Así es como funciona? o estoy haciendo algo incorrectamente Me gustaría obtener la máquina del cliente, y no el servidor. Estoy usando formularios web con asp.NET 4.0
Ryan S
2
Acabo de probar esto y descubrí que Dns.GetHostName() no daba el nombre completo.
Sam
55
Tenga en cuenta que System.Enviornment.MachineName solo le dará el nombre NetBIOS, por lo que si el nombre de host tiene más de 15 caracteres, tendrá problemas si necesita el nombre completo. No puedo hablar por los demás.
RandomInsano
78

System.Environment.MachineName

O, si está utilizando Winforms, puede usar System.Windows.Forms.SystemInformation.ComputerName, que devuelve exactamente el mismo valor que System.Environment.MachineName.

Zach Johnson
fuente
52
System.Environment.MachineName
Concepto alterado
fuente
Tan fácil como un pastel en F # open system...let system_name = System.Environment.MachineName
octopusgrabbus 03 de
23

Algunos métodos se dan a continuación para obtener el nombre de la máquina o el nombre de la computadora

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 más ver mi blog

NEERAJ SRIVASTAVA
fuente
22
string name = System.Environment.MachineName;
Zach
fuente
15

Bueno, hay una forma más: Instrumentación de administración de 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

Creador de código WMI

Preguntas frecuentes

PRR
fuente
4

Prueba esto:

string[] computer_name = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
return computer_name[0].ToString();
Un ghazal
fuente
1
El nombre DNS y el nombre de la computadora pueden diferir. ¡Está pidiendo el nombre de la computadora!
marsh-wiggle
4

Establecí el .InnerHtml de un <p>soporte para mi proyecto web en el nombre de la computadora del usuario haciendo lo siguiente:

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;
    }
   }
}
Joe
fuente
1

2 métodos más útiles: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName") para obtener el nombre de la PC del usuario si están conectados a través de Citrix XenApp o Terminal Services (también conocido como RDS, RDP, Escritorio remoto)

JRrelyea
fuente
1

Prueba 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;
}
LEFOPHANA GODFREY
fuente
Pero, ¿por qué no usar System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName?
osexpert