2012-08-22 103 views
8

我使用下面的代碼來引用外殼DLL shell界面參考使用Windows .NET 4.0

  Type t = Type.GetTypeFromProgID("Shell.Application"); 

      Shell s = (Shell)Activator.CreateInstance(t); 


      Console.WriteLine("success"); 
      Console.ReadLine(); 

它正常工作在我的Windows當我嘗試在2003年贏得運行的exe 7開發machine.But服務器我得到這個例外

Unable to cast COM object of type 'System.__ComObject' to interface type 'Shell3 
2.Shell'. This operation failed because the QueryInterface call on the COM compo 
nent for the interface with IID '{866738B9-6CF2-4DE8-8767-F794EBE74F4E}' failed 
due to the following error: No such interface supported (Exception from HRESULT: 
0x80004002 (E_NOINTERFACE)). 

我花了一些幫助,從C#: Referencing a windows shell interface但沒有運氣。

我使用微軟殼牌控制和自動化參考這是Interop.Shell32 DLL

如果有人能夠引導它會非常有幫助引用外殼。

+1

這是老了,我不認爲GUID的已經改變了,但誰知道參考。在該機器上運行regedit.exe並導航到HKCR \ Shell.Application。驗證CLSID鍵值是{13709620-C279-11CE-A49E-444553540000} –

+0

有一個更簡單的解決方案,請參閱http://stackoverflow.com/a/24967301/625349 –

回答

15

好吧,這是我經歷的問題是如何得到櫃面它可以幫助別人

這是我的新的代碼看起來像

Type t = Type.GetTypeFromProgID("Shell.Application"); 

dynamic shell = Activator.CreateInstance(t); 

//This is browse through all the items in the folder 
var objFolder = shell.NameSpace(@"\\fileshares\Files\test"); 

foreach (var item in objFolder.Items()) 
{ 
    //This is to get the file's comments for each files in the folderitem 

    string file_version = objFolder.GetDetailsOf(item, 14).ToString(); 

    Console.WriteLine(file_version); 

} 

這個腳本是由 http://nerdynotes.blogspot.com/2008/06/vbnet-shell32-code-compiled-on-vista.html

結合幫助和

http://foro.h-sec.org/net/problemas-en-net/

第二個環節是在西班牙,我用谷歌翻譯,以彌補在英語

感謝所有誰回答了這個問題

+0

僅供參考這裏有另一個類似的解決方案,這個相同的問題可能會有所幫助:https://stackoverflow.com/questions/26646068/getting-metadata-information-from-a-file-using-c-sharp –

1

而不是

Type t = Type.GetTypeFromProgID("Shell.Application"); 

dynamic shell = Activator.CreateInstance(t); 

我用

var shell = (IShellDispatch4) new Shell(); 

shell.Namespace然後按預期工作。

原來的殼對象默認爲IShellDispatch5,不能在XP中使用或2003

+0

我不能在我的C#代碼(4.0)中獲得選項IShellDispatch4。我需要添加任何參考嗎? – Newbee