Есть ли способ разрешить цель .lnk, которая работает для ссылок, которые заканчиваются в c: \ windows \ installer? - PullRequest
1 голос
/ 08 июня 2009

Обычный способ решения lnk предполагает использование WShell.WshShortcut или IShellLink следующим образом:

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

Но есть ссылки, которые не могут быть разрешены таким образом: например, разрешение заканчивается на c: \ windows \ installer \ {some-guid} \ python_icon.exe Большинство программ Office тоже имеют эту проблему.

У CodeProject есть еще одно решение, созданное путем обратного инжиниринга в формате lnk http://www.codeproject.com/KB/shell/ReadLnkFile.aspx, но оно не работает в этих случаях.

Есть ли другой способ?

Что это за папка c: \ Windows \ Installer? И что это за что-то вставленное в файл нечто_icon.exe

1 Ответ

1 голос
/ 08 июня 2009

Хорошо, я нашел решение здесь: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/2df18f93-77d8-4217-94a1-6cbe5333a6c4

Поскольку эти lnk являются MSI lnk, вам необходимо использовать функции Msi для определения пути:

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 содержит путь.

...