Hallo,
zunächst worum es geht:
Ein Kunde hat ein Tool, welches Verzeichnisse kopiert/verschiebt. Das Programm soll so "korrigiert" werden, dass Verknüpfungen erstellt werden, anstatt die Verzeichnisse zu kopieren bzw. zu verschieben.
Genutzt wurde VB .NET 4.0 mit einer WinForms Anwendung. Wenn ich das Programm starte bzw. debugge, erhalte ich eine Exception beim Erstellen eines Shell Objektes
Die Fehlermeldung lautet
Die Problematik wurde bereits schon einmal hier besprochen, leider ohne Lösung
Bachgroundworker Shell
Die Shell32.dll ist bei den Referenzen eingebunden. Ich habe begonnen, den Code aufzuräumen und ihn mit Kommentaren zu versehen, wie gleich zu sehen sein wird, ist aber noch viel zu tun. Zunächst klickt der Anwender auf einen "Anlegen" Button und startet den Prozess. Es wird ein neues BackgroundWorker Objekt erzeugt, diesem werden dann die nötigen Variablen als Parameter übergeben. Gestartet wird dieser per
Das getriggerte Do_Work Event zieht sich die übergebenen Variablen des Workers und baut verschiedene Pfade zusammen, die hinterher für die Shortcuts benötigt werden. Zum Schluss wird diese Methode aufgerufen, die, wenn ich es richtig verstanden habe, die Verknüpfung im Zielverzeichnis anlegt:
Dort fliegt er mir dann bei
direkt um die Ohren mit der erwähnten Fehlermeldung. Kennt sich jemand damit aus und kann helfen?
zunächst worum es geht:
Ein Kunde hat ein Tool, welches Verzeichnisse kopiert/verschiebt. Das Programm soll so "korrigiert" werden, dass Verknüpfungen erstellt werden, anstatt die Verzeichnisse zu kopieren bzw. zu verschieben.
Genutzt wurde VB .NET 4.0 mit einer WinForms Anwendung. Wenn ich das Programm starte bzw. debugge, erhalte ich eine Exception beim Erstellen eines Shell Objektes
Die Fehlermeldung lautet
Das COM-Objekt des Typs "System.__ComObject" kann nicht in den Schnittstellentyp "Shell32.Shell" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{286E6F1B-7113-4355-9562-96B7E9D64C54}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Schnittstelle nicht unterstützt (Ausnahme von HRESULT: 0x80004002 (E_NOINTERFACE)).
Die Problematik wurde bereits schon einmal hier besprochen, leider ohne Lösung
Bachgroundworker Shell
Die Shell32.dll ist bei den Referenzen eingebunden. Ich habe begonnen, den Code aufzuräumen und ihn mit Kommentaren zu versehen, wie gleich zu sehen sein wird, ist aber noch viel zu tun. Zunächst klickt der Anwender auf einen "Anlegen" Button und startet den Prozess. Es wird ein neues BackgroundWorker Objekt erzeugt, diesem werden dann die nötigen Variablen als Parameter übergeben. Gestartet wird dieser per
Das getriggerte Do_Work Event zieht sich die übergebenen Variablen des Workers und baut verschiedene Pfade zusammen, die hinterher für die Shortcuts benötigt werden. Zum Schluss wird diese Methode aufgerufen, die, wenn ich es richtig verstanden habe, die Verknüpfung im Zielverzeichnis anlegt:
Quellcode
- ' Verknüpfung erstellen
- Private Function CreateShortcut(ByVal sLinkFile As String, ByVal sTargetFile As String, Optional ByVal sArguments As String = "", Optional ByVal sDescription As String = "", Optional ByVal sWorkingDir As String = "") As Boolean
- Try
- Dim oShell As New Shell32.Shell
- Dim oFolder As Shell32.Folder
- Dim oLink As Shell32.ShellLinkObject
- ' Ordner und Dateinamen extrahieren
- Dim lastPathSegmentIndex As Integer = sLinkFile.LastIndexOf("\")
- Dim sPath As String = sLinkFile.Substring(0, lastPathSegmentIndex)
- Dim sFile As String = sLinkFile.Substring(lastPathSegmentIndex + 1)
- ' Wichtig! Link-Datei erstellen (0 Bytes)
- Dim F As Short = FreeFile()
- FileOpen(F, sLinkFile, OpenMode.Output)
- FileClose(F)
- oFolder = oShell.NameSpace(sPath)
- oLink = oFolder.Items.Item(sFile).GetLink
- ' Eigenschaften der Verknüpfung
- With oLink
- If sArguments.Length > 0 Then .Arguments = sArguments
- If sDescription.Length > 0 Then .Description = sDescription
- If sWorkingDir.Length > 0 Then .WorkingDirectory = sWorkingDir
- .Path = sTargetFile
- ' Verknüpfung speichern
- .Save()
- End With
- ' Objekte zerstören
- oLink = Nothing
- oFolder = Nothing
- oShell = Nothing
- Return True
- Catch ex As Exception
- ' Fehler! ggf. Link-Datei löschen, falls bereit erstellt
- If System.IO.File.Exists(sLinkFile) Then Kill(sLinkFile)
- Return False
- End Try
- End Function
Dort fliegt er mir dann bei
direkt um die Ohren mit der erwähnten Fehlermeldung. Kennt sich jemand damit aus und kann helfen?