Varun Nayak89 Ответов: 1

Как добавить IP-адрес в windows 10 с помощью C#


Я хочу добавить несколько IP-адресов в свой порт Ethernet.
Я попробовал ниже в обе стороны

1. использование класса Управления


public void setIP()
            {
                string myDesc = "Realtek USB GbE Family Controller";
                string gateway = "10.210.255.1";
                string subnetMask = "255.255.255.0";
                string address = "10.210.255.102";
    
                var adapterConfig = new ManagementClass("Win32_NetworkAdapterConfiguration");
                var networkCollection = adapterConfig.GetInstances();
    
                foreach (ManagementObject adapter in networkCollection)
                {
                    string description = adapter["Description"] as string;
                    if (string.Compare(description,
                        myDesc, StringComparison.InvariantCultureIgnoreCase) == 0)
                    {
                        try
                        {
                            // Set DefaultGateway
                            var newGateway = adapter.GetMethodParameters("SetGateways");
                            newGateway["DefaultIPGateway"] = new string[] { gateway };
                            newGateway["GatewayCostMetric"] = new int[] { 1 };
    
                            // Set IPAddress and Subnet Mask
                            var newAddress = adapter.GetMethodParameters("EnableStatic");
                            newAddress["IPAddress"] = new string[] { address };
                            newAddress["SubnetMask"] = new string[] { subnetMask };
    
                            adapter.InvokeMethod("EnableStatic", newAddress, null);
                            adapter.InvokeMethod("SetGateways", newGateway, null);
    
                            Console.WriteLine("Updated to static IP address!");
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine("Unable to Set IP : " + ex.Message);
                        }
                    }
                }
            }


2. Использование Powersellscript в C#

private string RunScript()
            {
    
                      string scriptText = "$iplist = \"10.210.255.102\"" + "," + " \"10.210.255.103\"" + "\nforeach ($ip in $iplist)" +"\n{" +" \nNew-NetIPAddress -InterfaceAlias \"Ethernet\" -IPAddress $ip -PrefixLength 24" +"\n}";
    
                // create Powershell runspace
    
                Runspace runspace = RunspaceFactory.CreateRunspace();
    
                // open it
    
                runspace.Open();
    
                // create a pipeline and feed it the script text
    
                Pipeline pipeline = runspace.CreatePipeline();
                pipeline.Commands.AddScript(scriptText);
    
                // add an extra command to transform the script
                // output objects into nicely formatted strings
    
                // remove this line to get the actual objects
                // that the script returns. For example, the script
    
                // "Get-Process" returns a collection
                // of System.Diagnostics.Process instances.
    
                pipeline.Commands.Add("Out-String");
    
                // execute the script
    
                var results = pipeline.Invoke();
    
                // close the runspace
    
                runspace.Close();
    
                // convert the script result into a single string
    
                StringBuilder stringBuilder = new StringBuilder();
                foreach (PSObject obj in results)
                {
                    stringBuilder.AppendLine(obj.ToString());
                }
    
                return stringBuilder.ToString();
            }




Оба не работают, мой код работает правильно, он не идет внутрь улова,
но не в состоянии добавить IP,
даже я могу добавить IP с помощью запущенного файла power script из Windows PowerShell, но тот же сценарий не работает внутри C#,

все что я пытаюсь добавить это количество IP адресов в одной карте Ethernet

Примечание: да, у меня есть права администратора, я уже выполняю это вручную и с помощью PowerShell tool power script.
еще одна вещь,
каждый раз, когда я должен щелкнуть правой кнопкой мыши окно PowerShell и запустить от имени администратора, чтобы запустить свой scrip

Что я уже пробовал:

Пожалуйста, проверьте приведенный выше код для класса управления и силовой оболочки,
Я пробовал и то и другое, но до сих пор ничего не решил

Richard MacCutchan

Вы запускаете это приложение от имени администратора?

Varun Nayak89

@Richard, я просто запускаю свое приложение от имени администратора и бум. Проблема решена!!
можете ли вы написать то же самое внутри решения, которое я хочу отметить как ответ

Richard MacCutchan

Смотреть ниже.

1 Ответов

Рейтинг:
5

Richard MacCutchan

Приложение должно запускаться от имени администратора. Это можно автоматизировать, добавив в приложение файл манифеста, содержащий следующие параметры:

<!-- set Execution level -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
  <security>
    <requestedPrivileges>
      <requestedExecutionLevel
          level="requireAdministrator" <!-- request admin privileges -->
          uiAccess="false"
      />
    </requestedPrivileges>
  </security>
</trustInfo>


Смотреть также запуск-приложения-от имени-администратора-когда-пользователь-является-администратором[^]