指定的值无效。使用C#添加防火墙规则

时间:2016-03-03 22:15:08

标签: c# firewall

我制作了一个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文件并尝试创建防火墙规则,我会收到错误:

特定值无效。 pic

我的第一个猜测是

之间的空格出了问题

Program()文件和程序()文件()(x86)

1 个答案:

答案 0 :(得分:2)

您的问题是Program Files包含空格,因此您需要在其周围添加引号。将您的行更改为:

string addToFirewall = "/K netsh advfirewall firewall add rule name=" + Path.GetFileName(item) + " dir=out action=block program=\"" + item + "\"";