Inno安装程序检测Windows防火墙状态

我需要检测Windows防火墙状态(即是否启用)以显示一条消息,警告防火墙规则可能需要configuration为在防火墙启用时允许特定端口上的入站连接,而不是在启用时不是。 看下面的代码示例:

[Code] //Check if Windows Firewall is enabled function IsWindowsFirewallEnabled(): Boolean; begin //Method required here Result := True; end; function NextButtonClick(CurPageID: Integer): Boolean; begin //Display a warning message on a Server install if Windows Firewall is enabled if CurPageID = wpSelectComponents and IsComponentSelected('Server') and IsWindowsFirewallEnabled then begin MsgBox('Windows Firewall is currently enabled.' + #13#10 + #13#10 + 'You may need to enable inbound connections on ports 2638, 445 and 7.' mbInformation, MB_OK); Result := True; end; end; 

我需要的是一个IsWindowsFirewallEnabled函数的方法。 我已经阅读了一个方法,具有讽刺意味的是现在已经或多或less地被build议了,而我正在用这些信息来更新问题,似乎是从registry中读取EnableFirewall值:

 //Check if Windows Firewall is enabled function IsWindowsFirewallEnabled(): Boolean; var crdFirewallState: Cardinal; begin RegQueryDwordValue(HKLM, 'SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile', 'EnableFirewall', crdFirewallState); if crdFirewallState = 1 then Result := True; end; 

但是,我不相信这种方法,因为所有configuration文件的registry值显示在我的工作PC上启用,但在控制面板中查看域configuration文件显示禁用(我认为这与组策略相关)。

请注意,这需要适用于Windows XP和Server 2003以及Windows Vista和Server 2008及更高版本。

因此,最可靠的或者推荐的方法是什么?

Solutions Collecting From Web of "Inno安装程序检测Windows防火墙状态"

您需要确定注册表项,然后使用Innosetup的注册表查询功能以类似的方式查询注册表项。

 var Country: String; begin if RegQueryStringValue(HKEY_CURRENT_USER, 'Control Panel\International', 'sCountry', Country) then begin // Successfully read the value MsgBox('Your country: ' + Country, mbInformation, MB_OK); end; end; 

http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_regquerystringvalue

据称这是注册表项的信息:

路径:HKEY_LOCAL_MACHINE \ SOFTWARE \ Policies \ Microsoft \ WindowsFirewall \ DomainProfile位置:本地计算机值名称:EnableFirewall数据类型:DWORD(DWORD值)启用值:0已禁用值:1