私のボリュームシャドウコピーサービスリクエスターが失敗する理由
-
16-09-2019 - |
質問
VSSリクエスターを実装しましたが、Windows Server 2008でコンパイルおよび実行をリンクしますが、Windows Server 2003で実行しません。リクエスターはDLL内にあるため、DLLはロードされません。を使用して 依存関係ウォーカー, 、私は自分のDLLがvssapi.dllをうまく見つけていることを発見しましたが、それは報告しています:
Error: At least one required implicit or forwarded dependency was not found.
私のvssapi.dllを見ると、見つかりません CreateVssBackupComponentsInternal
, 、vssapi.dllはまったく違うものをエクスポートします: ?CreateVssBackupComponents@@YGJPAPAVIVssBackupComponents@@@Z
.
解決
VSSは、Windows XP、Windows Server 2003、Vista/Windows Server 2008など、各プラットフォームとOSごとに特異的にコンパイルおよびターゲットを絞る必要があります。
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
私はこれに対してすべてのクレジットを取ることができません、私はこれを把握しました。 アルファベス (見る 発表)、VSSを.NETコードに公開します。 MSDNはあまり役に立たなかったようです。しかし vshadow ツールとサンプルは、VSSリクエスターをコンパイルする方法の例を提供しました。
また、X64またはIA64対X86の場合、もう一度再コンパイルする必要があることに注意してください。つまり、すべてのプラットフォームをサポートするには、実行可能ファイルの9つのバージョンが必要です。
他のヒント
Alphavssが定義だけでなく、パスを設定することを追加したかっただけです。これはどちらの場合でも必要です。