2009-06-08 1 views
1

Der üblicher Weg lnk beinhalten zu beheben:Gibt es eine Möglichkeit, ein .lnk-Ziel zu lösen, das für Links funktioniert, die in c: windows installer enden? mit WShell.WshShortcut oder IShellLink auf diese Weise

var WshShell = WScript.CreateObject("WScript.Shell"); 
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\some-shortcut.lnk"); 
WScript.Echo(oShellLink.TargetPath) 

Aber es sind Links, die auf diese Weise nicht gelöst werden können: am Ende die Auflösung in c up: \ windows \ installer \ {some-guid} \ python_icon.exe zum Beispiel. Die meisten Office-Programme haben dieses Problem ebenfalls.

CodeProject hat eine andere Lösung durch Reverse Engineering des lnk-Formats http://www.codeproject.com/KB/shell/ReadLnkFile.aspx, aber es funktioniert nicht in diesen Fällen.

Gibt es einen anderen Weg?

Was ist das c: \ Windows \ Installer-Ordner? Und was ist das something_icon.exe, das darin steckt?

Antwort

1

Ok Ich habe hier die Lösung gefunden: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/2df18f93-77d8-4217-94a1-6cbe5333a6c4

Da diese lnk sind MSI lnk Sie Msi Funktionen verwenden, um den Pfad zu beheben:

TCHAR pc [50] = {0}; 
TCHAR feat [100] = {0}; 
TCHAR comp [50] = {0}; 
int b=MsiGetShortcutTarget("Python (command line).lnk",pc,feat,comp); 

TCHAR pth [500] = {0}; 
DWORD chs = 500; 
int i = MsiGetComponentPath (pc, comp, pth, &chs); 

pth enthält den Pfad.

Verwandte Themen