8

我正在使用以下代码来引用 shell dll

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

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


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

它在我的 Windows 7 开发机器上运行良好。但是当我尝试在 Win 2003 服务器上运行 exe 时,我得到了这个异常

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# 获得了一些帮助:引用 Windows shell 界面但没有运气。

我正在使用 Microsoft Shell 控件和自动化参考来引用 shell,即 Interop.Shell32 dll

如果有人可以指导它会非常有帮助。

4

3 回答 3

19

好的,这就是我解决问题的方法,以防它帮助某人

这就是我的新代码的样子

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/

第二个链接是西班牙语的,我用谷歌翻译把它变成了英文

感谢所有回答这个问题的人

于 2012-08-22T16:22:44.470 回答
1

看看这个: http: //nerdynotes.blogspot.com/2008/06/vbnet-shell32-code-compiled-on-vista.html我认为这是同一个问题。

于 2012-08-22T14:27:02.603 回答
1

代替

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

dynamic shell = Activator.CreateInstance(t);

我用了

var shell = (IShellDispatch4) new Shell();

shell.Namespace 然后按预期工作。

结果表明,shell 对象的引用默认为 IShellDispatch5,不能在 XP 或 2003 中使用。

于 2013-05-06T20:32:28.180 回答