2012-08-22 26 views
8

Tôi đang sử dụng đoạn mã sau để tham khảo một dll vỏtham khảo một cửa sổ shell giao diện sử dụng .net 4.0

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

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


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

Nó hoạt động tốt trên các cửa sổ của tôi 7 phát triển machine.But khi tôi cố gắng chạy exe trên Win 2003 máy chủ Tôi nhận được ngoại lệ này

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)). 

Tôi lấy một số trợ giúp từ C#: Referencing a windows shell interface nhưng không may mắn.

Tôi đang tham khảo vỏ sử dụng Controls Microsoft Shell và Tự động hóa tài liệu tham khảo mà là Interop.Shell32 dll

Nếu ai đó có thể hướng dẫn nó sẽ thực sự hữu ích.

+1

Đó là cũ, tôi không nghĩ rằng guids đã thay đổi nhưng ai mà biết được. Chạy regedit.exe trên máy đó và điều hướng đến HKCR \ Shell.Application. Xác minh rằng giá trị khóa CLSID là {13709620-C279-11CE-A49E-444553540000} –

+0

Có một giải pháp đơn giản hơn, hãy xem http://stackoverflow.com/a/24967301/625349 –

Trả lời

15

Ok, đây là cách tôi đã thông qua các vấn đề trong trường hợp nó sẽ giúp người

Đây là cách mã mới của tôi trông giống như

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); 

} 

Kịch bản này là bằng cách kết hợp sự giúp đỡ từ http://nerdynotes.blogspot.com/2008/06/vbnet-shell32-code-compiled-on-vista.html

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

Các liên kết thứ hai là ở Tây Ban Nha, tôi sử dụng google dịch để làm cho nó lên bằng tiếng Anh

Nhờ tất cả những người trả lời cho câu hỏi này

+0

FYI có một giải pháp tương tự cho cùng một vấn đề ở đây có thể hữu ích: https://stackoverflow.com/questions/26646068/getting-metadata-information-from-a-file-using-c-sharp –

1

Hãy xem điều này: http://nerdynotes.blogspot.com/2008/06/vbnet-shell32-code-compiled-on-vista.html Tôi nghĩ rằng đó là cùng một vấn đề.

+0

Tôi đã thử tùy chọn đó trước khi đăng câu hỏi stackoverflow.I có thể tạo một đối tượng sử dụng object shell = Activator.CreateInstance (t); Nhưng sau đó tôi không chắc chắn làm thế nào tôi có thể sử dụng tài sản không gian tên.I đã cố gắng sử dụng nó như được đề xuất trong một og các ý kiến ​​của các liên kết bạn đăng nhưng không có may mắn với điều đó là tốt. – user1131926

1

Thay vì

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

dynamic shell = Activator.CreateInstance(t); 

tôi đã sử dụng

var shell = (IShellDispatch4) new Shell(); 

shell.Namepace sau đó hoạt động như mong đợi.

Hóa ra rằng tài liệu tham khảo cho một đối tượng vỏ mặc định là IShellDispatch5, mà không thể được sử dụng trong XP hoặc 2003.

+0

Tôi không thể có được tùy chọn IShellDispatch4 trong mã C# của tôi (4.0). Tôi có cần thêm bất kỳ tham chiếu nào không? – Newbee

Các vấn đề liên quan