使用 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();
我是 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();