Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#和CMD定义防火墙_C#_.net_Visual Studio_Firewall_Windows Firewall - Fatal编程技术网

使用C#和CMD定义防火墙

使用C#和CMD定义防火墙,c#,.net,visual-studio,firewall,windows-firewall,C#,.net,Visual Studio,Firewall,Windows Firewall,我是C#development的新手,我正在寻找一款定义防火墙规则的应用程序。。。 我几乎搜索了所有地方,找到了一些使用NetFwMgr的代码,但它不起作用,我不知道为什么!? 但是我知道它的cmd代码,所以我开始在VisualStudio2019中使用过程方式 cmd中的代码行工作正常,并返回单词“OK”。但我不能用C来完成# 如果有人能帮助我理解它的概念,我将不胜感激 以下是我所做工作的代码片段: 试试看 { string str=“netsh advfirewall firewall ad

我是C#development的新手,我正在寻找一款定义防火墙规则的应用程序。。。 我几乎搜索了所有地方,找到了一些使用
NetFwMgr
的代码,但它不起作用,我不知道为什么!? 但是我知道它的
cmd
代码,所以我开始在
VisualStudio2019
中使用
过程
方式

cmd
中的代码行工作正常,并返回单词“OK”。但我不能用C来完成#

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

以下是我所做工作的代码片段:

试试看
{
string str=“netsh advfirewall firewall add rule name=“+”\”SQL\”“+”dir=in action=allow的端口
协议=TCP本地端口=1433”;
ProcessStartInfo psi=新的ProcessStartInfo();
流程=新流程();
psi.FileName=“cmd.exe”;
psi.WindowsStyle=ProcessWindowsStyle.Normal;
动词“runas”;
参数=str;
过程.StartInfo=磅/平方英寸;
process.Start();
进程:WaitForExit(1000);
}
捕获(例外情况除外)
{
MessageBox.Show(例如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();

您的命令参数中似乎缺少一个空格:
…name=“+”\”用于SQL\”“+”dir=in…
的端口应该是
…name=“+”\”用于SQL\”“+”dir=in…
为了将来的参考,请求调试帮助的堆栈溢出问题需要包含一个适当的参数。上述操作失败的原因很多,不仅是不完整的,而且还涉及到一个命令,该命令需要对关键操作系统设置进行特权访问,而大多数人都不想为了重现问题而修改这些设置。它应该足以提供一个仍然重现问题的替代命令;当然,在这种情况下,如果您更改了命令,问题可能会消失,证明。。。。。。实际上,您根本没有一个有用的编程问题,而是在传递的命令行参数中出现了一个印刷错误。这是否回答了您的问题@Atrin Noori:然后你应该检查一下,你的命令实际上是什么样子的(因为Peter Duniho说你缺少一个空格),你应该检查进程的退出代码以及可能会给你提示的stdout。谢谢,它工作得很好。整个想法是使用
“network shell”
而不是
“cmd”