2017-06-04 1 views
0

Je travaille sur un peu de code qui utilise un protocole DHCP personnalisé pour obtenir une adresse IP. Le code doit ensuite définir l'un des NIC des machines sur cette adresse IP.Définir IP de la machine sur Windows 7

Le code que j'ai pour cela est ci-dessous.

private void SetIp(IPAddress ipAddress, IPAddress subnetMask, IPAddress gatewayAddress) 
    { 
      try 
      { 
       ManagementBaseObject objNewIP = null; 
       ManagementBaseObject objSetIP = null; 
       ManagementBaseObject objNewGate = null; 


       objNewIP = networkInterface.GetMethodParameters("EnableStatic"); 
       objNewGate = networkInterface.GetMethodParameters("SetGateways"); 



       //Set DefaultGateway 
       objNewGate["DefaultIPGateway"] = new string[] { gatewayAddress.ToString() }; 
       objNewGate["GatewayCostMetric"] = new int[] { 1 }; 


       //Set IPAddress and Subnet Mask 
       objNewIP["IPAddress"] = new string[] { ipAddress.ToString() }; 
       objNewIP["SubnetMask"] = new string[] { subnetMask.ToString() }; 

       objSetIP = networkInterface.InvokeMethod("EnableStatic", objNewIP, null); 
       objSetIP = networkInterface.InvokeMethod("SetGateways", objNewGate, null); 



       Console.WriteLine(
        "Updated IPAddress, SubnetMask and Default Gateway!"); 



      } 
      catch (Exception ex) 
      { 
      } 

     // throw new System.NotImplementedException(); 
    } 

Je continue à obtenir 2147749891 sur l'appel EnableStatic. Cet article Machine IP reset does nothing suggère que j'ai besoin de privilèges d'administrateur sur la machine que je fais.

La page Microsoft https://msdn.microsoft.com/en-us/library/aa390383(v=vs.85).aspx suggère que j'ai besoin d'acquérir un verrou en écriture qui nécessite un code com que je préfère éviter.

Existe-t-il un meilleur moyen d'y parvenir, peut-être en utilisant netsh et peut-être d'une manière qui ne nécessite pas de privilège d'administrateur? Tout ce que je l'adresse MAC de la carte réseau pour définir les détails et définir pour elle

Merci

Répondre

1

Je suis la même erreur lors de l'appel EnableStatic.

Élever l'utilisateur en cours d'exécution à un administrateur (exécuter en tant qu'administrateur) a résolu mon problème, ce qui semble normal: seul l'administrateur peut modifier les paramètres de la carte réseau.

Je n'ai pas encore déterminé pourquoi un utilisateur avec un accès admin ne peut pas exécuter le même code, peut-être un problème d'UAC, l'enquête est en cours.

En ce qui concerne la page Microsoft (https://msdn.microsoft.com/en-us/library/aa390383(v=vs.85).aspx), le "verrou en écriture non activé" est 2147786788. Non 21477 49891 .