c++ - Windows系統(tǒng)中如何獲取快捷方式文件對應的程序路徑?
問題描述
目標:獲取快捷方式文件對應的程序(文件)路徑
環(huán)境: Windows 10, Visual Studio 2015, C++
問題:
3.1 windows提供了獲取路徑的API, 參見[ISHellLink::GetPath][1]。3.2 使用SLGP_SHORTPATH作為參數(shù)能夠解決大部分問題,但是對于涉及到重定向的,該函數(shù)返回的是錯誤的路徑。 如“桌面/A.lnk”快捷方式文件對應的程序是“C:Program FilesAA.exe”,但是使用該參數(shù)后,返回的路徑是“C:Program Files (x86)AA.exe”。3.3 使用SLGP_RAWPATH作為參數(shù),能獲取長路徑,這樣可以對有環(huán)境變量的長路徑進行expand,目前是這個思路。但是函數(shù)有時會返回空字符串,但是MSDN上并沒有詳細的解釋。
問題解答
回答1:不要用ShortPath,8.3短文件名是DOS時代的東西。禁用64位文件重定向,Wow64DisableWow64FsRedirection。還原64位文件系統(tǒng)重定向, Wow64RevertWow64FsRedirection 函數(shù)。每當成功調(diào)用禁用重定向做完所需操作后,必須立即恢復重定向,以免出現(xiàn)問題。或者64位系統(tǒng)編譯一個64位的程序,就不會重定向了。你可以試著先獲取RawPath,失敗了再調(diào)用一次沒有RawPath的。注意RawPath可能包含環(huán)境變量,需要ExpandEnviron擴展它。另外你可以試試這個庫:https://github.com/libyal/liblnk
相關文章:
1. vim - docker中新的ubuntu12.04鏡像,運行vi提示,找不到命名.2. 為什么我ping不通我的docker容器呢???3. docker網(wǎng)絡端口映射,沒有方便點的操作方法么?4. debian - docker依賴的aufs-tools源碼哪里可以找到啊?5. docker-compose 為何找不到配置文件?6. mac連接阿里云docker集群,已經(jīng)卡了2天了,求問?7. 百度地圖api - Android 百度地圖 集成了定位,導航 相互的jar包有沖突?8. html5和Flash對抗是什么情況?9. golang - 用IDE看docker源碼時的小問題10. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?

網(wǎng)公網(wǎng)安備