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