1

我已经实现了一个 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.

4

2 回答 2

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

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

于 2009-04-25T21:23:49.157 回答
1

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

于 2009-05-31T20:41:31.457 回答