Tôi có thư viện .NET 4.0 sử dụng Shell32 và Folder.GetDetailsOf() để lấy siêu dữ liệu từ tệp WTV. Tôi đã sử dụng nó thành công với các ứng dụng Console và Windows Forms mà không có vấn đề gì. Nhưng vì một lý do nào đó, khi gọi thành phần từ .NET 4.0 Windows Service, lời gọi khởi tạo lớp Shell gây ra lỗi COM.Gọi Shell32.dll từ .NET Windows Service
Mã không nằm trong thư viện:
Shell32.Shell shell = new Shell();
Lỗi:
Không thể đúc tượng COM của loại 'Hệ thống .__ ComObject' giao diện gõ 'Shell32.Shell'. Thao tác này thất bại vì cuộc gọi QueryInterface trên thành phần COM cho giao diện với IID '{286E6F1B-7113-4355-9562-96B7E9D64C54}' không thành công do lỗi sau: Không hỗ trợ giao diện như vậy (Ngoại lệ từ HRESULT: 0x80004002 (E_NOINTERFACE)) .
Tôi đọc phần điền Căn hộ, COM Interops, Dynamic, PIA's, v.v., v.v.) Nhưng không có sự kết hợp các giải pháp tôi đã tìm thấy đã giải quyết được vấn đề. Nó phải là một cuộc gọi từ một chủ đề khác mà không thể nhìn thấy Interop. Help, please :)
Tôi đồng ý với bạn về sự cố về quyền. +1 – FrostyFire
+1, nhưng theo [MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx), trong Vista và cao hơn dịch vụ không thể tương tác với máy tính để bàn ở tất cả (trực tiếp, dù sao). Từ trang được liên kết: "** Các dịch vụ quan trọng ** không thể tương tác trực tiếp với người dùng như Windows Vista." Tôi không chắc chắn tôi sẽ nói "theo mặc định" trong trường hợp đó. :-) –
@KenWhite: Chỉ cần kiểm tra Windows 8 và hộp kiểm đó cho phép tương tác vẫn còn đó. Tôi nghĩ rằng đó là việc không thể tương tác với máy tính để bàn thuộc về người dùng đã đăng nhập. Tuy nhiên, tôi nghĩ rằng các dịch vụ có quyền đó vẫn nhận được phiên * máy tính để bàn * riêng của họ. –