为什么我的卷影复制服务请求程序失败:找不到CreateVssBackupComponentsInternal

时间:2009-04-25 21:23:38

标签: windows volume-shadow-service

我已经实现了一个VSS请求者,它在Windows Server 2008上链接编译和执行,但是在Windows Server 2003上没有执行。由于我的请求者在DLL中,我的DLL不会加载。使用Dependency Walker,我发现我的DLL正好发现VSSAPI.DLL,但它报告:

Error: At least one required implicit or forwarded dependency was not found.

查看我的VSSAPI.DLL,它找不到CreateVssBackupComponentsInternal,而VSSAPI.DLL导出的内容完全不同:?CreateVssBackupComponents@@YGJPAPAVIVssBackupComponents@@@Z

2 个答案:

答案 0 :(得分:1)

VSS必须专门针对每个平台和操作系统进行编译和定位,包括Windows XP,Windows Server 2003和Vista / Windows Server 2008。

第一个完全支持VSS请求者的Microsoft SDK是v6.1,它只支持在Vista上运行的请求者。如果要在Windows Server 2003或XP上运行:

  • 下载VSS SDK 7.2
  • 设置包含和库路径以搜索VSS SDK中的相应目录。

以下是AlphaVSS在其Config.h中所做的事情,但VSS SDK中的VShadow示例却没有:它只设置包含和库路径。我建议跟随VShadow更有可能成功。但为了完整性:

如果定位到Windows XP:

#define NTDDI_VERSION NTDDI_WINXPSP2
#define _WIN32_WINNT _WIN32_WINNT_WINXP
#define WINVER _WIN32_WINNT

如果定位到Windows Server 2003:

#define NTDDI_VERSION NTDDI_WS03SP1
#define _WIN32_WINNT _WIN32_WINNT_WS03
#define WINVER 0x501

如果定位Vista,请不要引用VSS SDK。而是引用Windows 6.1 SDK和:

#define NTDDI_VERSION NTDDI_WS08
#define _WIN32_WINNT _WIN32_WINNT_WS08
#define WINVER _WIN32_WINNT

我不能完全相信这一点,我通过阅读名为AlphaVSS的项目的源代码(参见announcement)来解决这个问题,该项目将VSS暴露给.NET代码。 MSDN似乎没有太大帮助。但是,VShadow工具和示例提供了如何编译VSS请求程序的示例。

另请注意,必须再次为x64或ia64 vs x86重新编译。这意味着为了支持所有平台,您需要9个可执行文件的编译版本。

答案 1 :(得分:1)

只是想补充一点,AlphaVSS也设置路径,而不仅仅是定义。在任何一种情况下都需要这样做。