Laden...

[gelöst] Shell 32 Vista->XP problem (Shell32.ShellClass->Shell32.IShellDispatch5)

Erstellt von HeikoRq vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.513 Views
H
HeikoRq Themenstarter:in
22 Beiträge seit 2007
vor 15 Jahren
[gelöst] Shell 32 Vista->XP problem (Shell32.ShellClass->Shell32.IShellDispatch5)

Hi,
ich habe mal wieder ein Wunderbares Problem.

Folgendes kommt als Fehlermeldung:

Das COM-Objekt des Typs "Shell32.ShellClass" kann nicht in den Schnittstellentyp "Shell32.IShellDispatch5" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{866738B9-6CF2-4DE8-8767-F794EBE74F4E}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte:

Das ganze passiert hier:


FileInfo tmp_file = new FileInfo(file);
            ShellClass shell = new ShellClass();
            Folder dir = shell.NameSpace(Path.GetDirectoryName(file));
            FolderItem item = dir.ParseName(Path.GetFileName(file));
                fileinfos = new string[10];
                fileinfos[0] = dir.GetDetailsOf(item, 1);
                fileinfos[1] = dir.GetDetailsOf(item, 2);
                fileinfos[2] = dir.GetDetailsOf(item, 27);
                fileinfos[3] = dir.GetDetailsOf(item, 28);
                fileinfos[4] = dir.GetDetailsOf(item, 16);
                fileinfos[5] = dir.GetDetailsOf(item, 13);
                fileinfos[6] = dir.GetDetailsOf(item, 21);
                fileinfos[7] = dir.GetDetailsOf(item, 14);
                fileinfos[8] = dir.GetDetailsOf(item, 15);
                fileinfos[9] = file;

über google habe ich nichts passendes gefunden, aber evtl könnt ihr mir helfen.

Das Projekt habe ich unter Vista-SP1 mit VS2008 erstellt, und da läuft es auch super.
Wenn ich es aber auf einen XP Rechner mit Framework 3.5 packe tritt dieser Fehler auf.

G
497 Beiträge seit 2006
vor 15 Jahren

wo soll der Fehler denn auftreten? Da wird nur in einer Zeile die Klasse Shell32.ShellClass angesprochen - und da wird sie explizit instanziert. Ich seh gar nicht, wo das Objekt shell eingesetzt wird.

H
HeikoRq Themenstarter:in
22 Beiträge seit 2007
vor 15 Jahren

tja mir geht es genauso 😉

das ist die komplette meldung:

Informationen über das Aufrufen von JIT-Debuggen
anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.

************** Ausnahmetext **************
System.InvalidCastException: Das COM-Objekt des Typs "Shell32.ShellClass" kann nicht in den Schnittstellentyp "Shell32.IShellDispatch5" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{866738B9-6CF2-4DE8-8767-F794EBE74F4E}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)).
bei Shell32.ShellClass.NameSpace(Object vDir)
bei BTF_Helper.Form1.FileInfos(String file) in G:\Eigene Dateien\Dokumente\Visual Studio 2008\Projects\BTF_Helper\BTF_Helper\Form1.cs:Zeile 102.
bei BTF_Helper.Form1.button1_Click_1(Object sender, EventArgs e) in G:\Eigene Dateien\Dokumente\Visual Studio 2008\Projects\BTF_Helper\BTF_Helper\Form1.cs:Zeile 397.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Der obere code ist der bei zeile 102,

der bei 39~
ist dieser hier:


ArrayList files = new ArrayList();
                files = getAllFiles(filename);
                dirsize = DirectorySize(filename);
                foreach (string file in files)
                {
                    //textBox2.Text += "\r\n" + file;  //begug code
                    musik_files_infos.Add(FileInfos(file)); //file = array
                }

906 Beiträge seit 2005
vor 15 Jahren

die Version 5 gibt es erst ab Vista, deshalb knallt es unter XP.

Probier mal das hier um die das Shell32 Objekt zu holen:

Type shellAppType = Type.GetTypeFromProgID("Shell.Application");
object shell = Activator.CreateInstance(shellAppType);

Wenn das alles nicht klappt, öffne das Projekt unter XP im VS2008 und importiere dort die COM Referenz, dann wird die Interop.Shell32.dll in der Version 4 erzeugt, die dann bei XP und Vista geht.

H
HeikoRq Themenstarter:in
22 Beiträge seit 2007
vor 15 Jahren

danke vielmals - ich teste es morgen mal, und berichte dann.

H
HeikoRq Themenstarter:in
22 Beiträge seit 2007
vor 15 Jahren

Abwärtskompatibilität ist schon was feines gg

Danke für den Tipp, ich baus jetzt mit XP und alles klappt.

Danke für den Hinweis - is zwar sehr komisch aber nun ja hauptsache es geht xD