IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

API SetComputerName fonctionne a moitié


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Par défaut API SetComputerName fonctionne a moitié
    Bonjour,

    Voilà, pour faire bref j'ai une application qui tien un textbox et un bouton.
    Lors du clique sur le bouton, le logiciel est sensé changé le nom du PC par la valeur qui se trouve dans textbox.Text ...

    Seulement, il le fait mais a moitié, je vous explique :
    - Le nom est bien changé pour %COMPUTERNAME% ( variable d'environement )
    - Le nom est bien changé dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName
    - Le nom est bien changé dans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

    Par contre lorsque je fais Propriété systeme > Nom de l'ordinateur > La il n'est pas changé???
    Mais pourquoi???

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
     
    namespace CLSInstaller
    {
     
        public partial class MainForm : Form
        {
            [DllImport("kernel32.dll")]
            static extern bool SetComputerName(string lpComputerName);
     
            enum COMPUTER_NAME_FORMAT
            {
                ComputerNameNetBIOS,
                ComputerNameDnsHostname,
                ComputerNameDnsDomain,
                ComputerNameDnsFullyQualified,
                ComputerNamePhysicalNetBIOS,
                ComputerNamePhysicalDnsHostname,
                ComputerNamePhysicalDnsDomain,
                ComputerNamePhysicalDnsFullyQualified,
            }
     
            public MainForm()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
     
            private void label1_Click(object sender, EventArgs e)
            {
     
            }
     
            private void groupBox1_Enter(object sender, EventArgs e)
            {
     
            }
     
            private void radioButton1_CheckedChanged(object sender, EventArgs e)
            {
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                // Application des paramètres régionaux...
                    RegistryKey cle = Registry.CurrentUser.OpenSubKey(@"Control Panel\International", true);
                    cle.SetValue("sShortDate", "dd/MM/yyyy");
                    cle.SetValue("sTimeFormat", "HH:mm:ss");
                    cle.Close();
                    progressBar1.Value = 50;
     
                // Application du nom de L'ordianteur...
                    string ComptNm = textBox1.Text;
                    bool done = SetComputerName(ComptNm);
     
                    if (done)
                    {
                        Console.WriteLine("Done");
                    }
                    progressBar1.Value = 100;
     
     
            }
        }
    }

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Bonjour,

    consulter le MSDN
    SetComputerName

    The SetComputerName function stores a new NetBIOS name for the local computer. The name is stored in the registry and the name change takes effect the next time the user restarts the computer.
    Sinon c'est peut-être une question de droits

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Sinon c'est peut-être une question de droits

    Je ne pensse pas que cela viennent de question de droit, car le code est exécuté en administrateur.
    Sinon effectivement le nom NetBios est bien changé, dans le registre également. Seulement dans les paramètres système cela ne l'es pas.
    Ou vas t-il rechercher le nom du pc dans les parametres systeme???
    Voici le nom qui ne parviens pas a changer dans la piece jointe
    Images attachées Images attachées  

  4. #4
    Membre éprouvé
    Avatar de debug
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    1 034
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 034
    Par défaut
    Bonjour,

    Est-ce que le poste a été redémarré suite à l'éxécution de ton application ? Est-ce toujours incorrect suite au redémarrage ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Par défaut
    Re :-)

    Ben voilà, j'ai trouvé problème à ma solution...
    Pour les autres qui seront comme moi dans le même cas ou qui veulent tous simplement renomer le nom du pc en c# voici le code qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;
     
    namespace CLSInstaller
    {
     
        public partial class MainForm : Form
        {
            [DllImport("kernel32.dll")]
            static extern bool SetComputerName(string lpComputerName);
     
            enum COMPUTER_NAME_FORMAT
            {
                ComputerNameNetBIOS,
                ComputerNameDnsHostname,
                ComputerNameDnsDomain,
                ComputerNameDnsFullyQualified,
                ComputerNamePhysicalNetBIOS,
                ComputerNamePhysicalDnsHostname,
                ComputerNamePhysicalDnsDomain,
                ComputerNamePhysicalDnsFullyQualified,
            }
     
            public MainForm()
            {
                InitializeComponent();
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
     
            }
     
            private void label1_Click(object sender, EventArgs e)
            {
     
            }
     
            private void groupBox1_Enter(object sender, EventArgs e)
            {
     
            }
     
            private void radioButton1_CheckedChanged(object sender, EventArgs e)
            {
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                // Application des paramètres régionaux...
                    RegistryKey cle = Registry.CurrentUser.OpenSubKey(@"Control Panel\International", true);
                    cle.SetValue("sShortDate", "dd/MM/yyyy");
                    cle.SetValue("sTimeFormat", "HH:mm:ss");
                    cle.Close();
                    progressBar1.Value = 50;
     
                // Application du nom de L'ordianteur...
                 string ComptNm = textBox1.Text;
                    bool done = SetComputerName(ComptNm);
     
                    if (done)
                    {
                        Console.WriteLine("Done");
                    }
                    RegistryKey cleCMPT1 = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\SchedulingAgent", true);
                    RegistryKey cleCMPT2 = Registry.LocalMachine.OpenSubKey(@"SYSTEM\ControlSet001\Services\Tcpip\Parameters", true);
                    RegistryKey cleCMPT3 = Registry.LocalMachine.OpenSubKey(@"SYSTEM\ControlSet002\Services\Tcpip\Parameters", true);
                    cleCMPT1.SetValue("OldName", ComptNm);
                    cleCMPT2.SetValue("Hostname", ComptNm);
                    cleCMPT2.SetValue("NV Hostname", ComptNm);
                    cleCMPT3.SetValue("Hostname", ComptNm);
                    cleCMPT3.SetValue("NV Hostname", ComptNm);
                    cleCMPT1.Close();
                    cleCMPT2.Close();
                    cleCMPT3.Close();
     
                    progressBar1.Value = 100;
     
            }
        }
    }

    Explication :
    l'API SetComputerName va changé pour vous dans le nom NetBios et également changer deux clés dans le registre :
    - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName
    - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName

    Seulement L'api ne va malheureusement pas le changer partout... C'est pourquoi si vous voulez faire sa de facon complete, il faut le changer aussi dans..
    - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SchedulingAgent
    - HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters
    - HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Tcpip\Parameters

    Au plaisir,
    Si je me trompe quelque pars, je suis ouvert a toute remarque ;-)

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Par défaut
    Citation Envoyé par debug Voir le message
    Bonjour,

    Est-ce que le poste a été redémarré suite à l'éxécution de ton application ? Est-ce toujours incorrect suite au redémarrage ?
    Oui oui, cela ne venait pas du faite que le poste na pas été redémarer...
    L'ecran de parametres systeme prends ses info dans :
    - HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters
    - HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Tcpip\Parameters

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Testeur de regex qui ne fonctionne qu'à moitié
    Par charles_coiffier dans le forum Langage
    Réponses: 1
    Dernier message: 10/09/2008, 20h46
  2. [API NATIVE] Fonctionnement
    Par sloshy dans le forum Windows
    Réponses: 3
    Dernier message: 15/11/2007, 16h11
  3. [API]Comment fonctionne UpdateResource ?
    Par FremyCompany dans le forum VB.NET
    Réponses: 0
    Dernier message: 29/08/2007, 15h38
  4. [Conception] INSERT fonctionne a moitié, UPDATE Fonctionne, comprends pas?
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 06/09/2006, 17h22
  5. gestionnaire fonctionnant à moitié
    Par Pallas4 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/05/2006, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo