目标:获取快捷方式文件对应的程序(文件)路径
环境: Windows 10, Visual Studio 2015, C++
问题:
3.1 windows提供了获取路径的API, 参见[ISHellLink::GetPath][1]。
3.2 使用SLGP_SHORTPATH作为参数能够解决大部分问题,但是对于涉及到重定向的,该函数返回的是错误的路径。
如“桌面/A.lnk”快捷方式文件对应的程序是“C:\\Program Files\\A\\A.exe”,但是使用该参数后,返回的路径是“C:\\Program Files (x86)\\A\\A.exe”。
3.3 使用SLGP_RAWPATH作为参数,能获取长路径,这样可以对有环境变量的长路径进行expand,目前是这个思路。但是函数有时会返回空字符串,但是MSDN上并没有详细的解释。
ShortPath は使用しないでください。8.3 の短いファイル名は DOS 時代のものです。 64 ビット ファイル リダイレクトを無効にします。
Wow64DisableWow64FsRedirection。 64 ビット ファイル システムのリダイレクトを復元する、Wow64RevertWow64FsRedirection 関数。リダイレクトを無効にする呼び出しが成功し、必要な操作が完了したら、問題を回避するためにリダイレクトを直ちに復元する必要があります。
または、64 ビット システムが 64 ビット プログラムをコンパイルする場合、リダイレクトは行われません。
最初に RawPath の取得を試み、失敗した場合は、RawPath を使用せずに再度呼び出します。 RawPath には環境変数が含まれる場合があり、それを展開するには ExpandEnviron が必要になることに注意してください。さらに、このライブラリを試すこともできます: https://github.com/libyal/liblnk