部署NetFwTypeLib以管理Windows防火墙

时间:2010-11-28 09:52:56

标签: c# deployment assemblies filenotfoundexception windows-firewall

我的Windows服务需要从Windows防火墙创建/删除某些规则。为此,我通过COM与NetFwTypeLib中的<windows>\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位之间的问题。

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


编辑:对于除4.0之外的任何目标框架,这似乎都是VS2010 issue。有人有解决方法吗?

3 个答案:

答案 0 :(得分:9)

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

使用NetFwTypeLib; // 添加参考 %SYSTEMROOT%\ System32下\ FirewallAPI.dll

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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