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

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

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

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

Solutions Collecting From Web of "为什么我的卷影复制服务请求程序失败:找不到CreateVssBackupComponentsInternal"

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的项目的源代码(见公告 ),将VSS公开到.NET代码中来解决这个问题。 MSDN似乎不是很有帮助。 但是, VShadow工具和示例提供了如何编译VSS请求者的示例。

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

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