指定的值无效。使用 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 文件并尝试创建防火墙规则,我会收到错误消息:

特定值无效。 pic

我的第一个猜测是

之间的空格有问题

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

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

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