解析一下 Windows 的快捷方式居然这么难……

  首先,当然是 MSDN 一下 IShellLink 这个 COM 接口,照着写一下,然后测试。郁闷的事情开始了!

  IShellLink 对象无法正确解析 MSI 创建的新型快捷方式,所以要用 MsiGetShortcutTarget + MsiGetComponentPath 先尝试获得,失败了才用 IShellLink。

  继续测试大量快捷方式后,就会发现一个惨无人道的问题:当自己是 x86 程序时,读取的快捷方式如果指向的是 Program Files 下的任何文件或者文件夹,都会被强制解析为 Program Files (x86),好智能啊!!

  搜一下,发现使用 IShellLink 对象的前提下,无法解决这个问题。无数老外都郁闷!哥开始逆向,发现是 IDL 被读出来时就已经做了转换,所以用 IShellLink::GetIDList + SHGetPathFromIDList 也是浪费力气。

  最后无奈了,如果发现自己在 WOW64 下运行就直接自己解析快捷方式了……参考链接如下:

http://www.vckbase.com/index.php/wv/1132
http://www.codeproject.com/Articles/24001/Workaround-for-IShellLink-GetPath
http://biancheng.dnbcw.info/1000wen/447642.html

 

你可能感兴趣的:(msi,快捷方式,IShellLink)