2011-12-30 91 views
0

我在C++ Builder的XE開發一個Win32應用程序,它已在WinPE的2.X /在過去的幾年裏偉大的工作3.0環境。我已經在過去幾個月的一些顯著的變化,但現在,它的完成,我嘗試運行它的WinPE下,我得到的錯誤信息:程序無法啓動,因爲Shfolder.dll中從計算機中缺少。靜態鏈接SHFolder組件

由於我無法控制WinPE環境,並且此DLL未包含在WinPE中,所以我的第一個想法是嘗試靜態鏈接必要的組件。但是,它似乎提供的這個DLL功能只能從DLL中獲得。

我一直沒能找到這個DLL任何有用的信息,不幸的是我不知道,我添加了功能,現在需要這個DLL。我希望有人有這方面的經驗,並能幫助引導我朝着靜態鏈接所需的組件,或找到一種解決方法,使這個應用程序不再需要的DLL。謝謝!

+0

在您的代碼或C++構建器運行時支持庫中查找對SHGetFolderPath()的調用。這是一個棄用的函數,已經從shfolder.dll移動到shell32.dll。或者只是部署shfolder.dll和你的exe文件。 – 2011-12-30 19:39:14

回答

1

shfolder.dll用於獲取如桌面,我的文檔,Windows目錄,外殼文件夾路徑等,實現SHGetFolderPath()始終沿着由於SHGetSpecialFolderPath()之間,SHGetFolderLocation()SHGetKnownFolderPath()

實施的差異,等等。所有Windows版本

MSDN更好地解釋它:

此功能是SHGetSpecialFolderPath的超集,包含 早期版本的外殼。在包含Shell32.dll版本5.0(Windows Millennium Edition(Windows Me)和Windows 2000)的那些系統之前,SHGetFolderPath通過 獲得,SHFolder.dll隨Microsoft Internet Explorer 4.0和 更高版本一起分發。 SHFolder.dll總是調用當前平臺的 版本的這個函數。如果失敗,它會嘗試模擬適當的行爲。 Shfolder.dll中繼續被列入 向後兼容,但功能現在在 Shell32.dll中實現。

該DLL本身是redistributable因此您可以將它包含在WinPE中。您也可以使用其他功能中的任何一種,如果它們適合您,並且您不需要任何特殊情況。

+0

我沒有意識到ShGetFolderPath是位於單獨的dll中的包裝。我沒有分發WinPE,因此包括dll不是真正的選擇。這個快速而簡單的解決方法是簡單地使用SHGetSpecialFolderPath()來代替。感謝您及時的回覆! – Jimmyb 2011-12-30 20:27:34