2008-09-19 10 views

Répondre

6

Tandis que d'autres ont déjà dit que les System.Environment.MachineName vous renvoie le nom de la machine, méfiez-vous ...

Cette propriété ne retourne le nom NetBIOS (et seulement si votre application dispose des autorisations EnvironmentPermissionAccess.Read). Il est possible que le nom de votre machine dépasse la longueur définie dans:

MAX_COMPUTERNAME_LENGTH 

Dans ces cas, System.Environment.MachineName ne vous retourner le nom correct!

Notez également, il y a plusieurs noms de votre machine pourrait passer et Win32 il existe une méthode GetComputerNameEx qui est capable d'obtenir le nom correspondant à chacun de ces différents types de nom:

  • ComputerNameDnsDomain
  • ComputerNameDnsFullyQualified
  • ComputerNameDnsHostname
  • ComputerNameNetBIOS
  • ComputerNamePhysicalDnsDomain
  • ComputerNamePhysicalDnsFullyQualified
  • ComputerNamePhysicalDnsHostname
  • ComputerNamePhysicalNetBIOS

Si vous avez besoin de ces informations, vous êtes susceptibles d'avoir besoin d'aller à Win32 par p/invoquer, comme:

class Class1 
{ 
    enum COMPUTER_NAME_FORMAT 
    { 
     ComputerNameNetBIOS, 
     ComputerNameDnsHostname, 
     ComputerNameDnsDomain, 
     ComputerNameDnsFullyQualified, 
     ComputerNamePhysicalNetBIOS, 
     ComputerNamePhysicalDnsHostname, 
     ComputerNamePhysicalDnsDomain, 
     ComputerNamePhysicalDnsFullyQualified 
    } 

    [DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)] 
    static extern bool GetComputerNameEx(COMPUTER_NAME_FORMAT NameType, 
         [Out] StringBuilder lpBuffer, ref uint lpnSize); 

    [STAThread] 
    static void Main(string[] args) 
    { 
     bool success; 
     StringBuilder name = new StringBuilder(260); 
     uint size = 260; 
     success = GetComputerNameEx(COMPUTER_NAME_FORMAT.ComputerNameDnsDomain, 
            name, ref size); 
     Console.WriteLine(name.ToString()); 
    } 
} 
+0

Cela nécessiterait SecurityPermissionFlag.UnmanagedCode, non? – icelava

+0

Probablement, mais ma justification originale pour souligner le besoin de SecurityPermissionFlags était que personne n'en parlait du tout. Je dirais qu'en général la plupart des permissions sont accordées, ce qui laisse les situations où le nom est trop long ou un type de nom spécifique est nécessaire. –

Questions connexes