部署NetFwTypeLib以管理Windows防火墙

我的Windows服务需要从Windows防火墙创建/删除某些规则。 为此,我通过COM与\system32\hnetcfg.dll接口。 它在我的64位Windows 7计算机上运行良好 ,但在另一台64位Windows 7计算机上进行测试会引发以下错误:

 Service cannot be started. System.IO.FileNotFoundException: Could not load file or assembly 'Interop.NetFwTypeLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 

我有一种感觉,如果我使用我的应用程序嵌入并安装程序集,我会遇到不同版本的Windows以及32位和64位之间的问题。

如何解决这个缺少的assembly部署问题?


编辑:这似乎是除了4.0之外的任何目标框架的VS2010问题 。 有人有解决方法吗?

NetFwTypeLib对象不驻留在Windows 7旗舰版的hnetcfg.dll库中。 相反,它位于%system32%\ FirewallAPI.dll(例如c:\ windows \ system32 \ FirewallAPI.dll)的FirewallAPI.dll中。

使用NetFwTypeLib; //添加引用%SystemRoot%\ System32 \ FirewallAPI.dll

多么奇怪的错误! 我能想到的最好的是不依赖于DLLSystem32版本,将其复制到您的文件夹中并从那里调用它。 据我所知,我不认为DLL应该与不同的位计算机冲突,但如果他们这样做,那么只需从32位计算机获取不同的DLL,并为x64x86单独下载。 祝好运!

编辑:另外,我在VS2010 3.5或更低编程中遇到了一些麻烦。 尝试获取visual c#express 2008的版本并尝试使用它(通常在降级.net版本时修复了很多错误)

在Visual Studio 2012中工作时,我遇到了同样的问题。对我来说,修复是手动将interop.NetFwTypeLib.dll移动到我正在使用的目录中。 这似乎解决了我的问题。 希望能帮助到你