9

我的 Windows 服务需要从 Windows 防火墙创建/删除某些规则。为此,我通过 COM与NetFwTypeLibin进行交互。<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 问题。有没有人可以解决这个问题?

4

3 回答 3

14

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

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

于 2014-06-20T16:14:25.993 回答
1

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

于 2012-12-06T21:44:30.570 回答
1

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

编辑:另外,我在 3.5 或更低版本的VS2010. 尝试获取一个Visual c# express 2008版本并尝试使用它(通常会修复很多降级.net版本的错误)

于 2011-07-27T02:41:37.530 回答