- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我这里有一个在 Windows 7 中完美运行的代码,我从 this 获得了帮助发布....
当在 Win Xp Sp3 PC 上编译相同的代码时,问题就来了。它不兼容...说接口(interface)丢失(错误)....
我好像想不通。我再次添加了对 Windows XP 的 hnetcfg.dll(COM APi 引用)的引用(在 Windows 7 中,我必须将其他 dll“FirewallAPi.dll”添加到项目中
using NATUPNPLib;
using NETCONLib;
using NetFwTypeLib;
但是接口(interface)和其他类仍然对VS不可见
请原谅贴出全部代码
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using NATUPNPLib;
using NETCONLib;
using NetFwTypeLib;
namespace WindowsFirewallManager
{
/// Allows basic access to the windows firewall API.
/// This can be used to add an exception to the windows firewall
/// exceptions list
public class FirewallHelper
{
#region Variables
/// Hooray! Singleton access.
private static FirewallHelper instance;
/// Interface to the firewall manager COM object
private INetFwMgr fireWallManager = null;
#endregion
#region Properties
/// Singleton access to the firewallhelper object.
/// Threadsafe.
public static FirewallHelper Instance
{
get
{
lock (typeof (FirewallHelper))
{
return instance ?? (instance = new FirewallHelper());
}
}
}
#endregion
#region Constructivat0r
/// Private Constructor.
/// If this fails, HasFirewall will return false
private FirewallHelper()
{
// Get the type of HNetCfg.FwMgr, or null if an error occurred
Type fwMgrType = Type.GetTypeFromProgID("HNetCfg.FwMgr", false);
// Assume failed.
fireWallManager = null;
if (fwMgrType != null)
{
try
{
fireWallManager =
(INetFwMgr) Activator.CreateInstance(fwMgrType);
}
// In all other circumnstances, fireWallManager is null.
catch (ArgumentException)
{
}
catch (NotSupportedException)
{
}
catch (TargetInvocationException)
{
}
catch (MissingMethodException)
{
}
catch (MethodAccessException)
{
}
catch (MemberAccessException)
{
}
catch (InvalidComObjectException)
{
}
catch (COMException)
{
}
catch (TypeLoadException)
{
}
}
}
#endregion
#region Helper Methods
/// Gets whether or not the firewall is installed on this computer.
public bool IsFirewallInstalled
{
get
{
return fireWallManager != null &&
fireWallManager.LocalPolicy != null &&
fireWallManager.LocalPolicy.CurrentProfile != null;
}
}
/// Returns whether or not the firewall is enabled.
/// If the firewall is not installed, this returns false.
public bool IsFirewallEnabled
{
get
{
return IsFirewallInstalled &&
fireWallManager.LocalPolicy.CurrentProfile.
FirewallEnabled;
}
}
/// Returns whether or not the firewall allows Application "Exceptions".
/// If the firewall is not installed, this returns false.
///
///
/// Added to allow access to this method
public bool AppAuthorizationsAllowed
{
get
{
return IsFirewallInstalled &&
!fireWallManager.LocalPolicy.CurrentProfile.
ExceptionsNotAllowed;
}
}
/// Adds an application to the list of authorized applications.
/// If the application is already authorized, does nothing.
///
///
/// The full path to the application executable. This cannot
/// be blank, and cannot be a relative path.
///
///
/// This is the name of the application, purely for display
/// puposes in the Microsoft Security Center.
///
///
/// When applicationFullPath is null OR
/// When appName is null.
///
///
/// When applicationFullPath is blank OR
/// When appName is blank OR
/// applicationFullPath contains invalid path characters OR
/// applicationFullPath is not an absolute path
///
///
/// If the firewall is not installed OR
/// If the firewall does not allow specific application 'exceptions' OR
/// Due to an exception in COM this method could not create the
/// necessary COM types
///
///
/// If no file exists at the given applicationFullPath
public void GrantAuthorization(string applicationFullPath,
string appName,
NET_FW_SCOPE_ scope,
NET_FW_IP_VERSION_ ipVersion)
{
#region Parameter checking
if (applicationFullPath == null)
throw new ArgumentNullException("applicationFullPath");
if (appName == null)
throw new ArgumentNullException("appName");
if (applicationFullPath.Trim().Length == 0)
throw new ArgumentException(
"applicationFullPath must not be blank");
if (applicationFullPath.Trim().Length == 0)
throw new ArgumentException("appName must not be blank");
if (applicationFullPath.IndexOfAny(Path.InvalidPathChars) >= 0)
throw new ArgumentException(
"applicationFullPath must not contain invalid path characters");
if (!Path.IsPathRooted(applicationFullPath))
throw new ArgumentException(
"applicationFullPath is not an absolute path");
if (!File.Exists(applicationFullPath))
throw new FileNotFoundException("File does not exist",
applicationFullPath);
// State checking
if (!IsFirewallInstalled)
throw new FirewallHelperException(
"Cannot grant authorization: Firewall is not installed.");
if (!AppAuthorizationsAllowed)
throw new FirewallHelperException(
"Application exemptions are not allowed.");
#endregion
if (!HasAuthorization(applicationFullPath))
{
// Get the type of HNetCfg.FwMgr, or null if an error occurred
Type authAppType =
Type.GetTypeFromProgID("HNetCfg.FwAuthorizedApplication",
false);
// Assume failed.
INetFwAuthorizedApplication appInfo = null;
if (authAppType != null)
{
try
{
appInfo =
(INetFwAuthorizedApplication)
Activator.CreateInstance(authAppType);
}
// In all other circumnstances, appInfo is null.
catch (ArgumentException)
{
}
catch (NotSupportedException)
{
}
catch (TargetInvocationException)
{
}
catch (MissingMethodException)
{
}
catch (MethodAccessException)
{
}
catch (MemberAccessException)
{
}
catch (InvalidComObjectException)
{
}
catch (COMException)
{
}
catch (TypeLoadException)
{
}
}
if (appInfo == null)
throw new FirewallHelperException(
"Could not grant authorization: can't create INetFwAuthorizedApplication instance.");
appInfo.Name = appName;
appInfo.ProcessImageFileName = applicationFullPath;
appInfo.Scope = scope;
appInfo.IpVersion = ipVersion;
appInfo.Enabled = true;
// ...
// Use defaults for other properties of the AuthorizedApplication COM object
// Authorize this application
fireWallManager.LocalPolicy.CurrentProfile.
AuthorizedApplications.Add(appInfo);
}
// otherwise it already has authorization so do nothing
}
/// Removes an application to the list of authorized applications.
/// Note that the specified application must exist or a FileNotFound
/// exception will be thrown.
/// If the specified application exists but does not current have
/// authorization, this method will do nothing.
///
///
/// The full path to the application executable. This cannot
/// be blank, and cannot be a relative path.
///
///
/// When applicationFullPath is null
///
///
/// When applicationFullPath is blank OR
/// applicationFullPath contains invalid path characters OR
/// applicationFullPath is not an absolute path
///
///
/// If the firewall is not installed.
///
///
/// If the specified application does not exist.
public void RemoveAuthorization(string applicationFullPath)
{
#region Parameter checking
if (applicationFullPath == null)
throw new ArgumentNullException("applicationFullPath");
if (applicationFullPath.Trim().Length == 0)
throw new ArgumentException(
"applicationFullPath must not be blank");
if (applicationFullPath.IndexOfAny(Path.InvalidPathChars) >= 0)
throw new ArgumentException(
"applicationFullPath must not contain invalid path characters");
if (!Path.IsPathRooted(applicationFullPath))
throw new ArgumentException(
"applicationFullPath is not an absolute path");
if (!File.Exists(applicationFullPath))
throw new FileNotFoundException("File does not exist",
applicationFullPath);
// State checking
if (!IsFirewallInstalled)
throw new FirewallHelperException(
"Cannot remove authorization: Firewall is not installed.");
#endregion
if (HasAuthorization(applicationFullPath))
{
// Remove Authorization for this application
fireWallManager.LocalPolicy.CurrentProfile.
AuthorizedApplications.Remove(applicationFullPath);
}
// otherwise it does not have authorization so do nothing
}
/// Returns whether an application is in the list of authorized applications.
/// Note if the file does not exist, this throws a FileNotFound exception.
///
///
/// The full path to the application executable. This cannot
/// be blank, and cannot be a relative path.
///
///
/// The full path to the application executable. This cannot
/// be blank, and cannot be a relative path.
///
///
/// When applicationFullPath is null
///
///
/// When applicationFullPath is blank OR
/// applicationFullPath contains invalid path characters OR
/// applicationFullPath is not an absolute path
///
///
/// If the firewall is not installed.
///
///
/// If the specified application does not exist.
public bool HasAuthorization(string applicationFullPath)
{
#region Parameter checking
if (applicationFullPath == null)
throw new ArgumentNullException("applicationFullPath");
if (applicationFullPath.Trim().Length == 0)
throw new ArgumentException(
"applicationFullPath must not be blank");
if (applicationFullPath.IndexOfAny(Path.InvalidPathChars) >= 0)
throw new ArgumentException(
"applicationFullPath must not contain invalid path characters");
if (!Path.IsPathRooted(applicationFullPath))
throw new ArgumentException(
"applicationFullPath is not an absolute path");
if (!File.Exists(applicationFullPath))
throw new FileNotFoundException("File does not exist.",
applicationFullPath);
// State checking
if (!IsFirewallInstalled)
throw new FirewallHelperException(
"Cannot remove authorization: Firewall is not installed.");
#endregion
// Locate Authorization for this application
return
GetAuthorizedAppPaths().Cast<string>().Any(
appName =>
appName.ToLower() == applicationFullPath.ToLower());
// Failed to locate the given app.
}
/// Retrieves a collection of paths to applications that are authorized.
///
///
///
/// If the Firewall is not installed.
public ICollection GetAuthorizedAppPaths()
{
// State checking
if (!IsFirewallInstalled)
throw new FirewallHelperException(
"Cannot remove authorization: Firewall is not installed.");
ArrayList list = new ArrayList();
// Collect the paths of all authorized applications
foreach (
INetFwAuthorizedApplication app in
fireWallManager.LocalPolicy.CurrentProfile.
AuthorizedApplications)
list.Add(app.ProcessImageFileName);
return list;
}
#endregion
}
}
using System;
namespace WindowsFirewallManager
{
///
/// Describes a FirewallHelperException.
///
public class FirewallHelperException : Exception
{
///
/// Construct a new FirewallHelperException
///
///
public FirewallHelperException(string message)
: base(message)
{ }
}
}
如何使 FirewallManager 与两个操作系统版本或任何其他可能的方式兼容
感谢您的帮助....
最佳答案
INetFwMgr 的 MSDN 文章的备注部分明确提到了它:
Windows Vista: Windows Vista users must use applications developed in Windows Vista for all methods and properties of this interface.
说 INetFwMgr 接口(interface)实现在 Vista 中被替换是一种有点拙劣的说法。它有一个新的 IID,所以如果你在运行 Vista 或更高版本的机器上构建你的程序,那么你的程序将在 XP 上失败。您需要为 XP 用户创建一个特殊版本的程序。为此,您需要使用嵌入在 XP 版本 c:\windows\system32\firewallapi.dll 中的类型库。通过在该 DLL 上运行 tlbimp.exe 获取互操作库。拥有一台可以启动 XP 的机器或 VM 当然是获取该 DLL 副本并测试您的构建的好方法。
关于c# - 在 Windows 7 和 Xp Sp3 的 C# 中控制 Windows 防火墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9783152/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!