場景回顧:
我需要做一個功能,很簡單,就是顯示出本地所有的網絡連接
比如在我的網絡連接里有以下的items。
代碼里需要引用:Interop.Shell32.dll 這個dll
解決方案:
VS 里面的Interop.Shell32.dll(1.0) 這個版本太低了,需要重新到別的網站下過比這個高的版本(我使用的是1.2.107.0)
解決過程:
我下面的代碼就是找出所有上面的網絡連接名字(有些人會推薦叫我用WMI,對 這個找出這個很easy,但是WMI 沒法做我的一些進一步的需求。)
Shell32.Shell shell = new Shell32.ShellClass(); Shell32.Folder folder = shell.NameSpace(49); foreach (Shell32.FolderItem myItem in folder.Items()) { listBox1.Items.Add(myItem.Name); }
然后 開始測試,因為我用的是Win 7 +VS 2010 所有結果很perfect ,看下圖:
看,上面全部出來了。很正確,很開心,然后我就到XP 系統下面測試,悲劇了出現了下面的exception,
沒辦法啦,只好baidu或者google咯,就在老外的一篇文章中知道說到:Since I was developing under Vista, the RCW naturally assumed I wanted the latest interface (Shell32.IShellDispatch5). Windows XP only supports the Shell32.IShellDispatch4 interface.
指的是老外在Vista環境做的開發,因為Vista版本比XP的高,所以Xp不支持Shell32.IShellDispatch5,只支持Shell32.IShellDispatch4,ok,我進行轉換了,
var shell = (Shell32.IShellDispatch4)new Shell32.ShellClass();
可結果還是不行。
后來,想起是不是版本問題???、然后去重新下載了新的版本。。
我下來之后,有2個版本,在VS2010里的用的是第一個版本。請看:
后來我換成1.2.107 這個版本的,然后就ok啦。。
原因也就是上面的老外說的,版本問題。