Perché il Volume Shadow Copy Service richiedente venga meno; non riesce a trovare CreateVssBackupComponentsInternal
-
16-09-2019 - |
Domanda
Ho implementato un richiedente VSS, e collega compila ed esegue su Windows Server 2008, ma non esegue in Windows Server 2003. Poiché il mio richiedente è all'interno di una DLL, il mio DLL non verrà caricato. Utilizzando il Dependency Walker , ho scoperto che il mio DLL è trovare VSSAPI.DLL bene, ma riporta:
Error: At least one required implicit or forwarded dependency was not found.
Guardando il mio VSSAPI.DLL, non riesce a trovare CreateVssBackupComponentsInternal
, mentre VSSAPI.DLL esporta qualcosa di completamente diverso:. ?CreateVssBackupComponents@@YGJPAPAVIVssBackupComponents@@@Z
Soluzione
VSS deve essere compilato e mirato specificatamente per ogni piattaforma e sistema operativo, tra cui Windows XP, Windows Server 2003 e Vista / Windows Server 2008.
Il primo Microsoft SDK per supportare pienamente richiedenti VSS è v6.1 e supporta solo i richiedenti in esecuzione su Vista. Se si desidera eseguire su Windows Server 2003 o XP:
- VSS SDK 7.2 .
- Imposta il tuo comprendono e percorsi della libreria di ricerca nella directory appropriata nel SDK VSS.
Quello che segue è quello che fa nella sua AlphaVSS config.h , ma il campione VShadow nel VSS SDK non: imposta solo i percorsi comprendono e la biblioteca. Vorrei suggerire che in seguito VShadow è più probabilità di successo. Ma per completezza:
Se il targeting di Windows XP:
#define NTDDI_VERSION NTDDI_WINXPSP2
#define _WIN32_WINNT _WIN32_WINNT_WINXP
#define WINVER _WIN32_WINNT
Se il targeting di Windows Server 2003:
#define NTDDI_VERSION NTDDI_WS03SP1
#define _WIN32_WINNT _WIN32_WINNT_WS03
#define WINVER 0x501
Se il targeting Vista, non fare riferimento al VSS SDK. Invece riferimento l'SDK di Windows 6.1 e:
#define NTDDI_VERSION NTDDI_WS08
#define _WIN32_WINNT _WIN32_WINNT_WS08
#define WINVER _WIN32_WINNT
Non riesco a prendere tutto il merito per questo, ho capito questo leggendo il codice sorgente di un progetto denominato AlphaVSS (vedi annuncio ), che espone VSS a .NET codice. MSDN non sembrava essere molto utile. Tuttavia, il VShadow strumento e il campione fornito un esempio di come compilare un richiedente VSS.
Si noti inoltre che è necessario ricompilare ancora per x64 o ia64 vs x86. Ciò significa che al fine di sostenere tutte le piattaforme, è necessario 9 versioni compilate del vostro eseguibile.
Altri suggerimenti
Volevo solo aggiungere che AlphaVSS imposta anche i percorsi, non solo le definisce. Ciò è necessario in entrambi i casi.