我制作了一个Windows窗体应用程序,只需拖放.exe文件即可创建防火墙规则,如果.exe文件位于
,它就不起作用X:\ Program Files(x86)...... 或者在 X:\ Program files ...
我的代码的一部分,我认为问题是:
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);
}
}
例如,添加/创建防火墙规则的有效CMD命令是:
netsh advfirewall firewall add rule name="GOM.EXE" dir=out action=block program="C:\Program Files (x86)\GRETECH\GomPlayer\GOM.EXE"
如果我拖放GOM.exe文件并尝试创建防火墙规则,我会收到错误:
特定值无效。
我的第一个猜测是
之间的空格出了问题Program()文件和程序()文件()(x86)
答案 0 :(得分:2)
您的问题是Program Files
包含空格,因此您需要在其周围添加引号。将您的行更改为:
string addToFirewall = "/K netsh advfirewall firewall add rule name=" + Path.GetFileName(item) + " dir=out action=block program=\"" + item + "\"";