هل هناك طريقة لحل هدف .LNK يعمل مع الروابط التي تنتهي في C: Windows Installer؟
-
12-09-2019 - |
سؤال
الطريقة المعتادة لحل LNK تنطوي على استخدام Wshell.wshortcutut أو Ishelllink بهذه الطريقة:
var WshShell = WScript.CreateObject("WScript.Shell");
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\some-shortcut.lnk");
WScript.Echo(oShellLink.TargetPath)
ولكن هناك روابط لا يمكن حلها بهذه الطريقة: ينتهي القرار في C: Windows Installer {بعض guid} python_icon.exe علي سبيل المثال. معظم برامج Office لديها هذه المشكلة أيضا.
يحتوي CodeProjjject على حل آخر يتم القيام به الهندسة العكسية بتنسيق LNK http://www.codeproject.com/kb/shell/readlnkfile.aspx. لكنه لا يعمل في توسيس الحالات.
هل هناك أي طريقة أخرى ؟
ما هو مجلد C: Windows Installer هذا؟ وما هو هذا seacle_icon.exe الذي يتم وضعه فيه؟
المحلول
حسنا لقد وجدت الحل هنا: 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. يحتوي على المسار.