Existe uma maneira de resolver um alvo .lnk que funciona para ligações que acabam em c: \ windows \ installer?

StackOverflow https://stackoverflow.com/questions/964444

Pergunta

A maneira usual para resolver lnk envolvem o uso WShell.WshShortcut ou IShellLink dessa forma:

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

Mas existem links que não podem ser resolvidos dessa maneira: a resolução acabar em c: \ windows \ installer \ {some-guid} \ python_icon.exe , por exemplo. A maioria dos programas do Office tem esse problema também.

CodeProject tem outra solução feita por engenharia reversa o formato lnk http: // www. codeproject.com/KB/shell/ReadLnkFile.aspx mas não funciona em casos thoses.

Existe alguma outra maneira?

O que é este pasta c: \ Windows \ Installer? E o que é isso something_icon.exe que é colocado nele?

Foi útil?

Solução

Ok eu encontrei a solução aqui: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/2df18f93-77d8-4217-94a1-6cbe5333a6c4

Uma vez que estes lnk são MSI LNK você tem que usar funções MSI para resolver o caminho:

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 contém o caminho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top