C# 启动 NetSH 命令行

C# starting up NetSH commandline

对于我的学校项目,我想使用 C# 通过 NetSH 设置连接。 我用谷歌搜索了一些东西并得出了以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace Server_Smart_Road
{
    class Connection
    {
        private string FileName { get; }
        private string Command { get; set; }
        private bool UseShellExecute { get; }
        private bool RedirectStandardOutput { get; }

        private bool CreateNoWindow { get; }

        public Connection()
        {
            FileName = "netsh.exe";
            Command = "wlan set hostednetwork mode=allow ssid=SmartRoad key=smartroad123";
            UseShellExecute = false;
            RedirectStandardOutput = true;
            CreateNoWindow = true;

        }

        public void ChangeCommand(string command)
        {
            Command = command;
        }

        public void Run()
        {
            Process process = new Process();
            process.StartInfo.FileName = FileName;
            process.StartInfo.Arguments = Command;
            process.StartInfo.UseShellExecute = UseShellExecute;
            process.StartInfo.RedirectStandardOutput = RedirectStandardOutput;
            process.StartInfo.CreateNoWindow = CreateNoWindow;
        }
    }
}

现在我运行首先使用一个名为'process'的实例(运行())来配置连接,然后我使用相同的方法为一个新的同名实例启动命令。

在表单中,我正在使用以下代码创建此 class(连接)的新实例:

       private void btn_startnetwork_Click(object sender, EventArgs e)
    {
        connection = new Connection();
        connection.Run();
        connection.ChangeCommand("wlan start hostednetwork");
        connection.Run();
    }

问题是:打开时我没有看到任何程序打开 我点击按钮。我知道我已经说过 'CreateNoWindow' 应该是 true,但即使我将它设置为 false,它也不会启动 netSH。结果,我不知道程序是否做了它应该做的。

我正在为另一个命令启动一个新进程。此过程再次开始 netsh.exe。不知道对不对

首先,你应该重写运行():

public void Run(string cmd)
    {
        Process process = new Process();
        process.StartInfo.FileName = FileName;
        process.StartInfo.Arguments = cmd;
        process.StartInfo.UseShellExecute = UseShellExecute;
        process.StartInfo.RedirectStandardOutput = RedirectStandardOutput;
        process.StartInfo.CreateNoWindow = CreateNoWindow;
        process.Start();
    }

并这样称呼它:

connection = new Connection();
connection.Run("wlan set hostednetwork mode=allow ssid=SmartRoad key=smartroad123");

或更短(您的第二次调用):

new Connection().Run("wlan start hostednetwork");

有一个额外的构造函数

public Connection(string fn) : this()
{
    FileName = fn;
}

这看起来更好:

new Connection("netsh.exe").Run("wlan set hostednetwork ... ");
new Connection("netsh.exe").Run("wlan start hostednetwork");