netsh配置网络失败

1 篇文章 0 订阅

最近在写关于win10系统下修改网络配置的代码,程序中使用了netsh这个命令,代码如下(部分参考自网上的代码,抱歉忘了出处):

 if(ui->Network_ipnamed->isChecked()){
        QString ip = ui->Network_ip_p->text();
        QString netmask = ui->Network_submask_p->text();
        QString gateway = ui->Network_gateway_p->text();
        QString dns = ui->Network_dns_p->text();


        QProcess p1(this);
        QProcess p2(this);
        QString ipmaskgateway = "netsh interface ip set address " +  name + " static "+ ip + QString(" ") + netmask + QString(" ") + gateway + " 1";
        QString adddns = "netsh interface ip set dnsservers " + name  + " static " + dns + " PRIMARY "+" no ";
        QStringList arguments1;
        QStringList arguments2;
        arguments1 << "/c" << ipmaskgateway;
        arguments2 << "/c" << adddns;
        p1.start("cmd",arguments1);
        p1.waitForFinished(3000);
        p2.start("cmd",arguments2);
        p2.waitForFinished(3000);
        QByteArray str1 = p1.readAllStandardOutput();
        QByteArray str2 = p2.readAllStandardOutput();
        QString strResult1 = QString::fromLocal8Bit(str1);
        QString strResult2 = QString::fromLocal8Bit(str2);
        if(strResult1 == "\r\n" && strResult2 == "\r\n"){
            WidgetPrompt::showPromptTimer("修改成功!");
        }else{
            WidgetPrompt::showPrompt(QString("服务器修改成功!\n本机设置失败!\nIP: %1DNS: %2").arg(strResult1).arg(strResult2), Qt::AlignLeft);
        }
    }
    else{
        QProcess p1(this);
        QProcess p2(this);
        QString ipmaskgateway = "netsh interface ip set address " + name + " dhcp ";
        QString adddns = "netsh interface ip set dnsservers " + name + " dhcp ";
        QStringList arguments1;
        QStringList arguments2;
        arguments1 << "/c" << ipmaskgateway;
        arguments2 << "/c" << adddns;
        p1.start("cmd",arguments1);
        p1.waitForFinished(3000);
        p2.start("cmd",arguments2);
        p2.waitForFinished(3000);
        QString strResult1 = QString::fromLocal8Bit(p1.readAllStandardOutput());
        QString strResult2 = QString::fromLocal8Bit(p2.readAllStandardOutput());
        if(strResult1 == "\r\n" && strResult2 == "\r\n"){
            WidgetPrompt::showPrompt("修改成功!");
        }else{
            WidgetPrompt::showPrompt("服务器修改成功!\n本机设置失败!\nIP: "+ strResult1 + "DNS: "+ strResult2, Qt::AlignLeft);
        }
    }

       测试发现,应用程序在一台电脑上可以设置网络成功,在另一台上却始终失败,通过对比发现,两者的网络名称不同,一台为“以太网”,另一个为“Ethenet 2”, 问题就出在了第二个的名字上,由于其中有空格,而在代码中ipmaskgateway,adddns 的name是直接放在字符串中的,这个空格导致了设置失败。将其中的name加上引号,问题解决,ipmaskgateway,adddns 修改后的代码如下:

  QString ipmaskgateway = "netsh interface ip set address " + QString("\"%1\"").arg(name) + " static "+ ip + QString(" ") + netmask + QString(" ") + gateway + " 1";
  QString adddns = "netsh interface ip set dnsservers " + QString("\"%1\"").arg(name) + " static " + dns + " PRIMARY "+" no ";


  QString ipmaskgateway = "netsh interface ip set address " + QString("\"%1\"").arg(name)+ " dhcp ";
  QString adddns = "netsh interface ip set dnsservers " + QString("\"%1\"").arg(name)+ " dhcp ";

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值