使用 C# 和 CMD 定义防火墙

Defining a firewall using C# and CMD

我是 C# 开发的新手,我正在寻找一个应用程序来定义防火墙规则... 我几乎到处搜索并找到了一些使用 NetFwMgr 的代码,但它不起作用,我不知道为什么!? 但我知道它的 cmd 代码,所以我开始在 visual studio 2019.

中使用 Process 方式

cmd 中的代码行工作正常,returns 单词“OK”。但我不能用 C#

如果有人能帮助我理解它的概念,我将不胜感激。

这是我所做的代码片段:

 try
{
   string str = "netsh advfirewall firewall add rule name="+"\"Port for SQL\""+" dir=in action=allow 
                 protocol=TCP localport=1433";
   ProcessStartInfo psi = new ProcessStartInfo();
   Process process = new Process();

   psi.FileName = "cmd.exe";
   psi.WindowStyle = ProcessWindowStyle.Normal;
   psi.Verb = "runas";
   psi.Arguments = str;

   process.StartInfo = psi;
   process.Start();
   process.WaitForExit(1000);
}
catch (Exception ex)
{
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

它什么都不做。它只是等待 1 秒,什么也没有发生。它甚至没有发现任何错误。请帮忙

更新:我什至 运行 以管理员身份运行 exe 文件,但没有任何反应...我还授予应用程序清单管理员访问权限:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

还是不行

您正在呼叫 cmd.exe 而不是 netsh。您作为参数传递的字符串未在新创建的控制台中执行,为此您需要 运行 cmd /c ...

只需使用 netsh 作为您的 psi.Filename 并使用 advfirewall ... 作为您的参数

string str = "advfirewall firewall add rule name=" + "\"Port for SQL\"" + " dir=in action=allow protocol=TCP localport=63000";
ProcessStartInfo psi = new ProcessStartInfo();
Process process = new Process();

psi.FileName = "netsh";
psi.WindowStyle = ProcessWindowStyle.Normal;
psi.Arguments = str;

process.StartInfo = psi;
process.Start();

process.WaitForExit();