我的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。有人有解决方法吗?
答案 0 :(得分:9)
NetFwTypeLib对象不驻留在Windows 7旗舰版的hnetcfg.dll库中。相反,它驻留在%system32%\ FirewallAPI.dll(例如c:\ windows \ system32 \ FirewallAPI.dll)的FirewallAPI.dll中。
使用NetFwTypeLib; // 添加参考 %SYSTEMROOT%\ System32下\ FirewallAPI.dll
答案 1 :(得分:1)
多么奇怪的错误!我能想到的最好的就是不要依赖System32
版DLL
,将其复制到你的文件夹中并从那里调用它。据我所知,我不认为DLL应该与不同的位计算机冲突,但如果他们这样做,那么只需从32位计算机获取不同的DLL,并为x64
和x86
分别下载。祝你好运!
VS2010
的3.5或更低编程中遇到了一些问题。尝试获取 visual c#express 2008 的版本并尝试使用它(通常会在降级.net
版本时修复很多错误)
答案 2 :(得分:1)
在Visual Studio 2012中工作时,我遇到了同样的问题。
对我来说,修复是手动将interop.NetFwTypeLib.dll
移动到我正在使用的目录中。这似乎解决了我的问题。希望它有所帮助