C# 使用管理员身份运行CMD,修改当前的适配器的IP
这个页面仅供我自己记录,是查找各个博客得来的结果,如果大神发现错误,欢迎指正。(原地址已经记不清了,如果侵权,请联系我删文)
//使用管理员身份打开cmd,据说这个方法某些环境不管用,不知什么原因 public void ExecuteCommandAsAdmin() { System.Diagnostics.Process process = new System.Diagnostics.Process(); System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //startInfo.FileName是要打开的程序 startInfo.FileName = “cmd.exe”; //startInfo.Arguments是要执行的命令 string cmd = “netsh interface ip set address " + activeAdapter.Name + " static 192.168.0.188 255.255.255.0”; startInfo.Arguments = "/C "+cmd; print(startInfo.Arguments); startInfo.Verb = “runas”; process.StartInfo = startInfo; process.Start(); process.WaitForExit(); process.Close(); }
**直接打开从cmd,且输入命令行,不是管理员身份**
ProcessCommand() 这个方法不能直接调用,需要新开一个线程
void Start() { Thread cmd = new Thread(CmdCtr); cmd.Start(); }
//传入的命令行指令
private void CmdCtr()
{
//打开控制面板
string cmd = "netsh interface ip set address "+ activeAdapter.Name + " static 192.168.0.188 255.255.255.0";
print(cmd);
//string cmd = "control";
//ProcessCommand("cmd.exe", cmd);
print("修改");
}
/// /// 打开cmd /// /// 打开的程序 /// 要输入的命令 //string cmd = “control”; //ProcessCommand(“cmd.exe”, cmd); public static void ProcessCommand(string command, string argument) { //UnityEngine.Debug.Log(argument); ProcessStartInfo info = new ProcessStartInfo(command); //启动应用程序时要使用的一组命令行参数。 //但是对于cmd来说好像是无效的,可能是因为UseShellExecute的值设置为false了 //但是对于svn的程序TortoiseProc.exe是可以使用的一个参数 //info.Arguments = argument; //是否弹窗 info.CreateNoWindow = true; //获取或设置指示不能启动进程时是否向用户显示错误对话框的值。 info.ErrorDialog = true; //获取或设置指示是否使用操作系统 shell 启动进程的值。 info.UseShellExecute = false;
if (info.UseShellExecute)
{
info.RedirectStandardOutput = false;
info.RedirectStandardError = false;
info.RedirectStandardInput = false;
}
else
{
info.RedirectStandardOutput = true; //获取或设置指示是否将应用程序的错误输出写入 StandardError 流中的值。
info.RedirectStandardError = true; //获取或设置指示是否将应用程序的错误输出写入 StandardError 流中的值。
info.RedirectStandardInput = true;//获取或设置指示应用程序的输入是否从 StandardInput 流中读取的值。
info.StandardOutputEncoding = System.Text.Encoding.UTF8;
info.StandardErrorEncoding = System.Text.Encoding.UTF8;
}
//启动(或重用)此 Process 组件的 StartInfo 属性指定的进程资源,并将其与该组件关联。
Process process = Process.Start(info);
//StandardInput:获取用于写入应用程序输入的流。
//将字符数组写入文本流,后跟行终止符。
process.StandardInput.WriteLine(argument);
//获取或设置一个值,该值指示 StreamWriter 在每次调用 Write(Char) 之后是否都将其缓冲区刷新到基础流。
process.StandardInput.AutoFlush = true;
if (!info.UseShellExecute)
{
UnityEngine.Debug.Log(process.StandardOutput);
UnityEngine.Debug.Log(process.StandardError);
}
//关闭
process.Close();
}
**遍历当前所有的网络适配器名称**
//NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
//foreach (NetworkInterface adapter in adapters)
//{
// print(adapter.Name);
//}
**查找当前所使用的网络适配器名称**
//NetworkInterfaceType.Ethernet 是以太网 NetworkInterfaceType.Wireless80211 是无线网卡
NetworkInterface[] networks = NetworkInterface.GetAllNetworkInterfaces();
activeAdapter = networks.First(x => x.NetworkInterfaceType != NetworkInterfaceType.Loopback
&& x.NetworkInterfaceType != NetworkInterfaceType.Tunnel
&& x.OperationalStatus == OperationalStatus.Up
&& x.Name.StartsWith("vEthernet") == false);
print(activeAdapter.Name);
|