2009-06-08 21 views
1

La manière habituelle de résoudre impliquent LNK en utilisant WShell.WshShortcut ou IShellLink cette façon:Y at-il un moyen de résoudre une cible .lnk qui fonctionne pour les liens qui se retrouvent dans c: windows installer?

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

Mais il y a des liens qui ne peuvent être résolus de cette façon: la résolution en fin c: \ windows \ installer \ {some-guid} \ python_icon.exe par exemple. La plupart des programmes Office ont également ce problème.

CodeProject a une autre solution réalisée par reverse engineering au format lnk http://www.codeproject.com/KB/shell/ReadLnkFile.aspx mais cela ne fonctionne pas dans ce cas.

Existe-t-il un autre moyen?

Qu'est-ce que ce dossier c: \ Windows \ Installer? Et quel est ce quelque chose_icon.exe qui est mis dedans?

Répondre

1

Ok j'ai trouvé la solution ici: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/2df18f93-77d8-4217-94a1-6cbe5333a6c4

Étant donné que ces LNK sont MSI LNK vous devez utiliser les fonctions Msi pour résoudre le chemin:

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); 

pième contient le chemin.