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

发布于 2024-07-17 19:19:03 字数 525 浏览 10 评论 0 原文

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

I have implemented a VSS requester, and it links compiles and executes on Windows Server 2008, but does not execute on Windows Server 2003. Since my requester is inside a DLL, my DLL will not load. Using the Dependency Walker, I discovered that my DLL is finding VSSAPI.DLL just fine, but it reports:

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

Looking at my VSSAPI.DLL, it cannot find CreateVssBackupComponentsInternal, while VSSAPI.DLL exports something completely different: ?CreateVssBackupComponents@@YGJPAPAVIVssBackupComponents@@@Z.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深巷少女 2024-07-24 19:19:03

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 个可执行文件的编译版本。

VSS must be compiled and targeted specifically for each platform and OS, including Windows XP, Windows Server 2003, and Vista/Windows Server 2008.

The first Microsoft SDK to fully support VSS requesters is v6.1, and it only supports requesters running on Vista. If you want to run on Windows Server 2003 or XP:

  • Download VSS SDK 7.2.
  • Set your include and library paths to search the appropriate directory in the VSS SDK.

The following is what AlphaVSS does in its Config.h, but the VShadow sample in the VSS SDK does not: it only sets the include and library paths. I would suggest that following VShadow is more likely to succeed. But for completeness:

If targeting Windows XP:

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

If targeting Windows Server 2003:

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

If targeting Vista, don't reference the VSS SDK. Instead reference the Windows 6.1 SDK and:

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

I can't take all the credit for this, I figured this out by reading the source code of a project called AlphaVSS (see announcement), which exposes VSS to .NET code. MSDN did not seem to be very helpful. However, the VShadow tool and sample provided an example of how to compile a VSS requester.

Also note that you must recompile again for x64 or ia64 vs x86. That means in order to support all platforms, you'll need 9 compiled versions of your executable.

残疾 2024-07-24 19:19:03

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

Just wanted to add that AlphaVSS also sets the paths, not only the defines. This is needed in either case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文