2011-12-30 54 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