Computernamen ändern

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Chris.

    Computernamen ändern

    Hallo zusammen,

    ich suche seit Stunden vergeblich nach einer Lösung den Computernamen zu ändern...

    auf DIESEM Code bin ich zu erst gestoßen, leider scheint dieser für VB6 zu sein und ich bekomme ihn nicht übersetzt/angepasst.

    mit DIESEM Code bleibt nach einem Neustart der alte Computername in den Systeminformationen und auch unter cmd->hostname ist der alte Name zu sehen. Rufe ich mit VB.Net den befehlt "msgbox(my.computer.name)" ab, wird der neuen Computername zurück gegeben?!?!?!?!?!

    Weiss einer von Euch eine Lösung?

    LG
    Chris
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class SetNewComputerName
    3. Private Enum COMPUTER_NAME_FORMAT As Integer
    4. ComputerNameNetBIOS = 0
    5. ComputerNameDnsHostname = 1
    6. ComputerNameDnsDomain = 2
    7. ComputerNameDnsFullyQualified = 3
    8. ComputerNamePhysicalNetBIOS = 4
    9. ComputerNamePhysicalDnsHostname = 5
    10. ComputerNamePhysicalDnsDomain = 6
    11. ComputerNamePhysicalDnsFullyQualified = 7
    12. End Enum
    13. Public Const MAX_COMPUTERNAME_LENGTH As Int32 = 31
    14. <DllImport("kernel32.dll", CharSet:=CharSet.Ansi, SetLastError:=True)> _
    15. Private Shared Function SetComputerNameEx( _
    16. ByVal NameType As COMPUTER_NAME_FORMAT, _
    17. <MarshalAs(UnmanagedType.LPStr)> ByVal lpBuffer As String) As Integer
    18. End Function
    19. Public Shared Function SetNewName(ByVal Computername As String) As Boolean
    20. If SetNewComputerName.SetComputerNameEx(COMPUTER_NAME_FORMAT.ComputerNamePhysicalDnsHostname, _
    21. Computername & Convert.ToChar(0)) = 0 Then
    22. Throw New Exception("Sie haben nicht das Recht, diese Änderung durchzuführen.")
    23. End If
    24. End Function
    25. End Class

    Geklaut und modifiziert von hier.
    Leider ungetestet.

    Gruß FatFire
    aus Long wird Integer, aus As String * 256 wird As String = "".PadLeft(256) '<- so hab ichs zumindest bisher immer gelöst...evtl. gehts auch mit nem StringBuilder...
    aus Len(Parameter) wird Parameter.Length...
    aus Left(parameter1,parameter2) wird parameter1.Substring(parameter2)
    aus Instr(parameter1, parameter2, parameter3) wird parameter2.IndexOf(parameter3,parameter1)

    ansonsten sollte alles stimmen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hallo zusammen,

    danke für Eure schnellen Hilfen...

    bei dem ersten Code komme ich immer nur bis zu dieser Fehlermeldung:

    Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Für die angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass Computername.Form1.resources beim Kompilieren richtig in die Assembly Computername eingebettet wurde, oder dass die erforderlichen Satellitenassemblys geladen werden können und vollständig signiert sind..

    ... welche aber nur NACH dem kompilieren auftritt!

    @jvbsl...

    Ich habe es auch mit deinem versucht, funktioniert mit genau dem selben Fehler wie ich vorher hatte, in den Systemeigenschaften bleibt es vorhanden aber rufe ich mit einer VB Application den befehl "my.computer.name" auf wird der name aufgerufen den ich mit der application eingegeben habe....

    Wie kann das?

    LG
    Chris
    Hallo zusammen,

    ich habe mir die Lösung selber zusammen gebastelt...

    VB.NET-Quellcode

    1. Dim varComputernameNeu As String = "Neuer Name"
    2. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ComputerName\ActiveComputerName", "ComputerName", varComputernameNeu, Microsoft.Win32.RegistryValueKind.String)
    3. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ComputerName\ComputerName", "ComputerName", varComputernameNeu, Microsoft.Win32.RegistryValueKind.String)
    4. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters", "Hostname", varComputernameNeu, Microsoft.Win32.RegistryValueKind.String)
    5. My.Computer.Registry.SetValue("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters", "NV Hostname", varComputernameNeu, Microsoft.Win32.RegistryValueKind.String)


    Vielen Dank für Eure hilfen...

    LG