我尝试在安装过程中创建Windows防火墙规则,但我无法理解我的命令格式错误。 ResultCode
中返回的错误是"错误的函数"
procedure OpenFirewall;
var
WindowsVersion: Integer;
ResultCode: Integer;
W7Command: String;
WXPCommand: String;
begin
WXPCommand := 'netsh firewall add portopening TCP 12345 "MyApp"'
W7Command := 'netsh advfirewall add rule name="MyApp" dir=in action=allow protocol=TCP localport=12345';
WindowsVersion := GetWindowsVersion();
case WindowsVersion of
5:
begin
Exec(ExpandConstant('{cmd}'), '/C ' + WXPCommand, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
end;
6:
begin
Exec(ExpandConstant('{cmd}'), '/C ' + W7Command, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Log(SysErrorMessage(ResultCode));
end;
end;
end;
答案 0 :(得分:2)
首先,仅当public void WriteCookiesToDisk(string file, CookieContainer cookieJar)
{
using (Stream stream = File.Create(file))
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, cookieJar);
}
}
public CookieContainer ReadCookiesFromDisk(string file)
{
try
{
using (Stream stream = File.Open(file, FileMode.Open))
{
BinaryFormatter formatter = new BinaryFormatter();
return (CookieContainer)formatter.Deserialize(stream);
}
}
catch (Exception e)
{
return new CookieContainer();
}
}
返回ResultCode
(表示无法启动进程)时,Exec
才会包含系统错误。如果False
成功启动该过程,则Exec
包含该过程的退出代码。你的情况可能是什么。您无法将退出代码传递给ResultCode
。
如果返回True并且Wait为ewWaitUntilTerminated,则ResultCode返回进程的退出代码。如果返回False,则ResultCode指定发生的错误。使用SysErrorMessage(ResultCode)获取错误的描述。
实际问题是SysErrorMessage
的语法。
您在netsh
之后缺少firewall
个关键字。
advfirewall
请参阅Netsh AdvFirewall Firewall Commands。
您是否还想先从命令行测试命令?
附注:
netsh advfirewall firewall add rule ...
Exec
netsh.exe