2016-03-03 144 views
0

我做了一个小的Windows窗体应用程序来创建防火墙规则只是拖放.exe文件,它不工作,如果.exe文件是在指定的值无效。使用C#添加防火墙规则

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

我的第一个猜测是,什么是错与

计划之间的空格()文件和程序()文件()(86)

+0

“Administrator”+“cmd” - 之间的空格? –

+2

你的问题是'Program Files'包含一个空格,所以你需要在它周围添加引号。因此,将这一行改为:'string addToFirewall =“/ K netsh advfirewall firewall add rule name =”+ Path.GetFileName(item)+“dir = out action = block program = \”“+ item +”\“” – Icemanind

回答

2

您的问题是Program Files包含空格,所以你需要在它周围添加引号。将您的线路更改为:

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

谢谢Icemanind ...不幸的是我不能upvote你的答案,因为我没有足够的声望点(最近注册) – lewis4u

相关问题