指定的值无效。使用 C# 添加防火墙规则
A specified value is not valid. Adding firewall rule with C#
我制作了一个 Windows 表单应用程序来通过拖放 .exe 文件来创建防火墙规则,如果 .exe 文件在
中,它就不起作用
X:\程序文件 (x86)...
或在
X:\程序文件...
我认为问题所在的部分代码:
private void button1_Click(object sender, EventArgs e)
{
foreach (string item in listBox1.Items)
//MessageBox.Show(Path.GetFileName(item));
{
string addToFirewall = "/K netsh advfirewall firewall add rule name=" + Path.GetFileName(item) + " dir=out action=block program=" + item;
System.Diagnostics.Process proc2 = new System.Diagnostics.Process();
proc2.StartInfo.CreateNoWindow = false;
proc2.StartInfo.Verb = "runas";
proc2.StartInfo.FileName = "cmd";
proc2.StartInfo.Arguments = "/env /user:" + "Administrator" + "cmd" + addToFirewall;
proc2.Start();
//MessageBox.Show(addToFirewall);
}
}
例如,add/create 防火墙规则的有效 CMD 命令是:
netsh advfirewall firewall add rule name="GOM.EXE" dir=out action=block program="C:\Program Files (x86)\GRETECH\GomPlayer\GOM.EXE"
如果我拖放 GOM.exe 文件并尝试创建防火墙规则,我会收到错误消息:
特定值无效。

我的第一个猜测是
之间的空格有问题
程序( )文件和程序( )文件( )(x86)
您的问题是 Program Files
包含一个 space,因此您需要在其周围添加引号。将您的行更改为:
string addToFirewall = "/K netsh advfirewall firewall add rule name=" + Path.GetFileName(item) + " dir=out action=block program=\"" + item + "\"";
我制作了一个 Windows 表单应用程序来通过拖放 .exe 文件来创建防火墙规则,如果 .exe 文件在
中,它就不起作用X:\程序文件 (x86)... 或在 X:\程序文件...
我认为问题所在的部分代码:
private void button1_Click(object sender, EventArgs e)
{
foreach (string item in listBox1.Items)
//MessageBox.Show(Path.GetFileName(item));
{
string addToFirewall = "/K netsh advfirewall firewall add rule name=" + Path.GetFileName(item) + " dir=out action=block program=" + item;
System.Diagnostics.Process proc2 = new System.Diagnostics.Process();
proc2.StartInfo.CreateNoWindow = false;
proc2.StartInfo.Verb = "runas";
proc2.StartInfo.FileName = "cmd";
proc2.StartInfo.Arguments = "/env /user:" + "Administrator" + "cmd" + addToFirewall;
proc2.Start();
//MessageBox.Show(addToFirewall);
}
}
例如,add/create 防火墙规则的有效 CMD 命令是:
netsh advfirewall firewall add rule name="GOM.EXE" dir=out action=block program="C:\Program Files (x86)\GRETECH\GomPlayer\GOM.EXE"
如果我拖放 GOM.exe 文件并尝试创建防火墙规则,我会收到错误消息:
特定值无效。
我的第一个猜测是
之间的空格有问题程序( )文件和程序( )文件( )(x86)
您的问题是 Program Files
包含一个 space,因此您需要在其周围添加引号。将您的行更改为:
string addToFirewall = "/K netsh advfirewall firewall add rule name=" + Path.GetFileName(item) + " dir=out action=block program=\"" + item + "\"";