Nachdem das Auslesen der Verknüpfungen mit der interop.shell32 Methode auf Rechnern ohne Adminrechten gescheitert ist, habe ich die WSH-Methode gewählt.
Auf meinen Windows 7 Clients funktioniert das jetzt wunderbar - egal ob mit oder ohne Admin.
Sorgen machen mir die XP-Clients, die ich leider noch mitschleppen muss.
Dort kommt ohne Admin folgender Fehler:
System.Runtime.InteropServices.COMException (0x80020009): Ausnahmefehler aufgetreten. (Ausnahme von HRESULT: 0x80020009 (DISP_E_EXCEPTION))
Spoiler anzeigen
So langsam verzweifel ich...
Gibt es denn keine .Net Methoden um Verknüpfungen auszulesen?
Cool wäre auch eine .Net Methode um den Papierkorb auszulesen und zu leeren. Die Methoden, die ich dafür gefunden und angewendet habe, basierten auch immer auf einer COM-Komponente, die als Verweis hinzugefügt werden muss. Und genau diese Dinge funzen bei mir nicht überall...
Hier soll die App via ClickOnce bereitgestellt werden. Das schränkt schon etwas ein.
Any help?
VB.NET-Quellcode
- Public Function LeseShellLinkPath(ByVal sLink As String) As String
- ' der mitgelieferte Link ist: sLink
- Dim Shortcut As IWshRuntimeLibrary.IWshShortcut = wshWSHSHELL.CreateShortcut(sLink)
- Dim sPfad As String = Shortcut.TargetPath
- Dim sLinkArguments As String = Shortcut.Arguments
- ' Rückgabewert der Funktion
- Return sPfad & " " & sLinkArguments
- End Function
Auf meinen Windows 7 Clients funktioniert das jetzt wunderbar - egal ob mit oder ohne Admin.
Sorgen machen mir die XP-Clients, die ich leider noch mitschleppen muss.
Dort kommt ohne Admin folgender Fehler:
System.Runtime.InteropServices.COMException (0x80020009): Ausnahmefehler aufgetreten. (Ausnahme von HRESULT: 0x80020009 (DISP_E_EXCEPTION))
************** Ausnahmetext **************
bei IWshRuntimeLibrary.IWshShell3.CreateShortcut(String PathLink)
bei MeinInfoCenterV3.Form1.LeseShellLinkPath(String sLink)
bei MeinInfoCenterV3.Form1.GetListOfLinksOnDesktop()
bei MeinInfoCenterV3.Form1.Form1_Load(Object sender, EventArgs e)
bei System.EventHandler.Invoke(Object sender, EventArgs e)
bei System.Windows.Forms.Form.OnLoad(EventArgs e)
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.WmShowWindow(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei IWshRuntimeLibrary.IWshShell3.CreateShortcut(String PathLink)
bei MeinInfoCenterV3.Form1.LeseShellLinkPath(String sLink)
bei MeinInfoCenterV3.Form1.GetListOfLinksOnDesktop()
bei MeinInfoCenterV3.Form1.Form1_Load(Object sender, EventArgs e)
bei System.EventHandler.Invoke(Object sender, EventArgs e)
bei System.Windows.Forms.Form.OnLoad(EventArgs e)
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.WmShowWindow(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
So langsam verzweifel ich...
Gibt es denn keine .Net Methoden um Verknüpfungen auszulesen?
Cool wäre auch eine .Net Methode um den Papierkorb auszulesen und zu leeren. Die Methoden, die ich dafür gefunden und angewendet habe, basierten auch immer auf einer COM-Komponente, die als Verweis hinzugefügt werden muss. Und genau diese Dinge funzen bei mir nicht überall...
Hier soll die App via ClickOnce bereitgestellt werden. Das schränkt schon etwas ein.
Any help?
so far...
Wumpel
...manchmal ist es einfacher als man denkt...
Wumpel
...manchmal ist es einfacher als man denkt...