c# - 在 C# 中更改网络配置

标签 c# .net networking windows-7

我正在尝试制作一个简单的程序来更改 C# 中的 IP 参数。 我使用此代码:How can you change Network settings (IP Address, DNS, WINS, Host Name) with code in C# 执行它,并制定了我自己的方法:

public void changerip(string adresse, string NIC)
{
    ManagementObjectCollection objMOC = objMC.GetInstances();
    foreach (ManagementObject objMO in objMOC)
    {

        if (objMO["Caption"].Equals(NIC))
        {
            try
            {
                if (adresse != "0")
                {
                    ManagementBaseObject setIP;
                    ManagementBaseObject newIP =
                        objMC.GetMethodParameters("EnableStatic");

                    newIP["IPAddress"] = new string[] { "192.168." + adresse + ".50" };
                    newIP["SubnetMask"] = new string[] { "255.255.255.0" };
                    setIP = objMO.InvokeMethod("EnableStatic", newIP, null);

                    ManagementBaseObject setGateway;
                    ManagementBaseObject newGateway =
                    objMO.GetMethodParameters("SetGateways");
                    newGateway["DefaultIPGateway"] = new string[] { "192.168." + adresse + ".254" };
                    newGateway["GatewayCostMetric"] = new int[] { 1 };
                    setGateway = objMO.InvokeMethod("SetGateways", newGateway, null);

                    ManagementBaseObject newDNS =
                    objMO.GetMethodParameters("SetDNSServerSearchOrder");
                    newDNS["DNSServerSearchOrder"] = "192.168.1.24,192.168.1.2".Split(',');
                    ManagementBaseObject setDNS =
                    objMO.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
                }
                else
                {
                    ManagementBaseObject newDNS = objMO.GetMethodParameters("SetDNSServerSearchOrder");
                    newDNS["DNSServerSearchOrder"] = null;
                    ManagementBaseObject enableDHCP = objMO.InvokeMethod("EnableDHCP", null, null);
                    ManagementBaseObject setDNS = objMO.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
                    //Save all Gateways into an array
                    string[] gateways = (string[])objMO["DefaultIPGateway"];

                    ManagementBaseObject newIP = objMO.GetMethodParameters("EnableStatic");
                    ManagementBaseObject newGate = objMO.GetMethodParameters("SetGateways");

                    //Set last value of the array(always the Gateway recived by DHCP) as the default Gateway
                    newGate["DefaultIPGateway"] = new string[] { gateways[gateways.Length - 1] };
                    newGate["GatewayCostMetric"] = new int[] { 1 };
                }
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }
        }
    }
}

它在 Windows XP 中运行良好,但不适用于 Windows 7(Starter 或 Pro)。我没有任何异常上升,也没有来自操作系统的错误/安全消息。

有人知道发生了什么事吗?

最佳答案

在我看来像是凭证问题。您应该使用管理权限运行该程序。您可以通过简单地右键单击 exe 并单击“以管理员身份运行”来完成此操作。

关于c# - 在 C# 中更改网络配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209982/

相关文章:

c# - 允许一次只调用一个实例的异步方法

c# - 适用于 Windows 8 RTM 的 Microsoft Advertising SDK 导致访问被拒绝错误

c# - RazorEngine 和布局的 TemplateCompilationError

c# - 什么是将获取每个 objX 的 Linq 查询,其中 objX.created = {newest}?

.net - 如何从 CloudBlockBlob.UploadFromFileAsync 获取上传进度?

Android ICS 网络位置未更新

c# - 特定于环境的 StructureMap 配置?

.net - 在 QuickBooks Online 的行对象中的何处添加日记帐分录行详细信息

c++ - 为网络消息设计类架构

networking - Netfilter_queue 是否只提供控制包