Gibt es eine Möglichkeit, ein LNK-Ziel zu lösen, die für Links funktionieren, die in c am Ende: \ windows \ installer?
-
12-09-2019 - |
Frage
Der üblicher Weg lnk zu lösen beinhaltet 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 gibt Links, die nicht auf diese Weise gelöst werden können: die Auflösung am Ende in c: \ windows \ installer \ {some-guid} \ python_icon.exe zum Beispiel. Die meisten Office-Programme haben auch dieses Problem.
Codeproject hat eine andere Lösung durch Reverse Engineering des LNK-Format http: // www. codeproject.com/KB/shell/ReadLnkFile.aspx aber es funktioniert nicht in thoses Fällen.
Gibt es eine andere Art und Weise?
Was ist das C: \ Windows \ Installer-Ordner? Und was ist das something_icon.exe, die darin gestellt wird?
Lösung
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 MSI sind lnk Sie haben 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);
p-ten enthält den Pfad.