我做了一个小的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文件,并尝试创建防火墙规则,我得到一个错误:
的具体取值是无效的。
我的第一个猜测是,什么是错与
计划之间的空格()文件和程序()文件()(86)
“Administrator”+“cmd” - 之间的空格? –
你的问题是'Program Files'包含一个空格,所以你需要在它周围添加引号。因此,将这一行改为:'string addToFirewall =“/ K netsh advfirewall firewall add rule name =”+ Path.GetFileName(item)+“dir = out action = block program = \”“+ item +”\“” – Icemanind