Bagaimana cara mendapatkan nama komputer di .NET

285

Bagaimana cara mendapatkan nama komputer di .NET c #


sumber
Tautan
Maleakhi
1
@Malachi, pertanyaan itu adalah tentang layanan Windows.
Sam
2
@ Sam layanan windows hanyalah aplikasi windows yang berjalan di latar belakang, jadi sungguh hal yang sama.
Maleakhi
@Malachi, ya, saya tahu apa yang Anda maksud. Namun, saya pikir referensi untuk ASP.NET-spesifik dan Winforms-cara khusus untuk melakukan ini dalam jawaban atas pertanyaan ini mungkin tidak berlaku dalam pertanyaan itu.
Sam
1
@Malachi, saya pikir Anda salah mengerti apa yang saya maksud tentang ASP.NET. Saya tidak merujuk pada aplikasi ASP.NET yang mendapatkan nama komputer kliennya, meskipun melakukannya (untuk nama DNS) mungkin mudah karena aplikasi tersebut akan mendapatkan alamat IP klien. Saya merujuk pada aplikasi ASP.NET mendapatkan nama komputer host mereka. Lihat jawaban dengan nilai tertinggi di sini sebagai contoh.
Sam

Jawaban:

400

Lihat Bagaimana menemukan FQDN mesin lokal di C # /. NET? jika yang terakhir tidak memberi Anda FQDN dan Anda membutuhkannya.

Lihat detail tentang Perbedaan antara SystemInformation.ComputerName, Environment.MachineName, dan Net.Dns.GetHostName

tvanfosson
sumber
3
@ tvanfosson: apa bedanya? Maksud saya, yang mana yang harus saya gunakan kapan? Apakah ini memiliki implikasi keamanan?
PK
26
Saya akan menggunakan yang pertama dari aplikasi konsol atau winforms, yang kedua dari aplikasi web, dan yang ketiga jika saya perlu mendapatkan FQDN. Lihat dokumentasi yang dirujuk untuk informasi tentang izin yang diperlukan.
tvanfosson
1
@vanfosson Ketiganya mendapatkan saya nama server dan bukan mesin klien yang mengakses halaman. Apakah ini cara kerjanya? atau apakah saya melakukan sesuatu yang salah. Saya ingin mendapatkan mesin klien, dan bukan server. Saya menggunakan Formulir Web dengan asp.NET 4.0
Ryan S
2
Saya baru saja menguji ini dan Dns.GetHostName() ternyata tidak memberikan nama yang sepenuhnya memenuhi syarat.
Sam
5
Perhatikan bahwa System.Enviornment.MachineName hanya akan memberi Anda nama NetBIOS, jadi jika nama host lebih panjang dari 15 karakter, Anda akan mengalami masalah jika Anda memerlukan nama lengkap. Saya tidak bisa berbicara untuk yang lain.
RandomInsano
78

System.Environment.MachineName

Atau, jika Anda menggunakan Winforms, Anda dapat menggunakan System.Windows.Forms.SystemInformation.ComputerName, yang mengembalikan nilai persis sama dengan System.Environment.MachineName.

Zach Johnson
sumber
52
System.Environment.MachineName
Mengubah Konsep
sumber
open systemlet system_name = System.Environment.MachineName
Semudah
23

Beberapa metode diberikan di bawah ini untuk mendapatkan nama mesin atau nama komputer

Metode 1: -

string MachineName1 = Environment.MachineName;

Metode 2: -

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

Metode 3: -

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

Metode 4: -

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

Untuk lebih lanjut lihat blog saya

NEERAJ SRIVASTAVA
sumber
22
string name = System.Environment.MachineName;
Zach
sumber
16

Anda dapat memiliki akses nama mesin menggunakan Environment.MachineName .

CesarGon
sumber
15

Nah ada satu cara lagi: Instrumentasi Manajemen 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

Pembuat Kode WMI

Tanya Jawab

PRR
sumber
4

Coba ini:

string[] computer_name = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["remote_addr"]).HostName.Split(new Char[] { '.' });
return computer_name[0].ToString();
Ghazal
sumber
1
Nama DNS dan nama pengguna mungkin berbeda. Dia meminta nama pengguna!
marsh-goyangkan
4

Saya menetapkan .InnerHtml <p>braket untuk proyek web saya ke nama komputer pengguna melakukan hal berikut:

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
sumber
1

2 metode yang lebih bermanfaat: System.Environment.GetEnvironmentVariable ("ComputerName")

System.Environment.GetEnvironmentVariable ("ClientName") untuk mendapatkan nama PC pengguna jika mereka terhubung melalui Citrix XenApp atau Terminal Services (alias RDS, RDP, Remote Desktop)

JRrelyea
sumber
1

Coba yang ini.

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
sumber
Tetapi mengapa tidak menggunakan System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties (). HostName?
osexpert