Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取运行时错误";在vssapi.dll中找不到过程条目;尝试运行卷影复制时_C++_Windows Xp_Windows Server 2003_Shadow Copy_Volume Shadow Service - Fatal编程技术网

C++ 获取运行时错误";在vssapi.dll中找不到过程条目;尝试运行卷影复制时

C++ 获取运行时错误";在vssapi.dll中找不到过程条目;尝试运行卷影复制时,c++,windows-xp,windows-server-2003,shadow-copy,volume-shadow-service,C++,Windows Xp,Windows Server 2003,Shadow Copy,Volume Shadow Service,代码编译得很好,我已将vssapi.lib包含在链接器的其他依赖项中 我收到的错误是“在vssapi.dll中找不到CreateVSSBackupComponents内部过程入口点” 只有当我尝试在WindowsServer2003或WindowsXP上运行它时,才会出现此错误。它在Windows7上运行良好 我将附上下面的代码,这是标准的卷影复制代码 // copy.cpp : Defines the entry point for the console application. // #

代码编译得很好,我已将vssapi.lib包含在链接器的其他依赖项中

我收到的错误是“在vssapi.dll中找不到CreateVSSBackupComponents内部过程入口点”

只有当我尝试在WindowsServer2003或WindowsXP上运行它时,才会出现此错误。它在Windows7上运行良好

我将附上下面的代码,这是标准的卷影复制代码

// copy.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <iostream>

#include <windows.h>
#include <winbase.h>

#include <vss.h>
#include <VsWriter.h>
#include <VsBackup.h>

int main()
{
    int retCode = 0;
    int i=0;
    HRESULT hr;
    IVssEnumObject *pIEnumSnapshots;
    IVssBackupComponents *ab;
    IVssAsync *pPrepareForBackupResults;
    GUID SnapshotSetID = GUID_NULL;

    VSS_OBJECT_PROP Prop;
    WCHAR wszVolumePathName[MAX_PATH]; 
    GUID snapshotID; 
    wcscpy(wszVolumePathName, L"E:\\");

    VSS_SNAPSHOT_PROP snapshotProperties;
    WCHAR existingFilePath[MAX_PATH] = TEXT("\\temp\\");
    WCHAR newFileLocation[MAX_PATH] = TEXT("c:\\Users\\");
    LPWCH pwszExposed;
    int *x;
    LONG deletedsnapshots = 0 ;
    GUID nondeletedsnapshots;
    TCHAR existingFileLocation[MAX_PATH];

    if (CoInitialize(NULL) != S_OK)
    {
        printf("CoInitialize failed!\n");
        return 1;
    }

    hr = CreateVssBackupComponents(&ab);
    if(hr != S_OK)
    {
        printf("Failed at CreateVssBackupComponents Stage");
        return 1;
    }

    hr = ab->InitializeForBackup();
    if(hr != S_OK)
    {
        printf("Failed at InitializeForBackup Stage");
        std::cout<<hr;
        return 1;
    }

    hr = ab->SetContext( VSS_CTX_FILE_SHARE_BACKUP);

    hr = ab->StartSnapshotSet(&SnapshotSetID);

    if(hr != S_OK)
    {
        printf("Failed at StartSnapshotset Stage");
        return 1;
    }

    hr = ab->AddToSnapshotSet(wszVolumePathName, GUID_NULL, &snapshotID); 

    if(hr != S_OK)
    {
        printf("Failed at AddtoSnapshotset Stage");
        return 1;
    }
    hr = ab->PrepareForBackup(&pPrepareForBackupResults);
    if(hr != S_OK)
    {
        printf("Failed at Backup");
    }

    hr = ab->DoSnapshotSet(&pPrepareForBackupResults);

    if(hr != S_OK)
    {
        printf("Failed at DoSnapshotset Stage");
        return 1;
    }

    while(true){
        pPrepareForBackupResults->QueryStatus(&hr, NULL);
        if(hr == VSS_S_ASYNC_FINISHED){
            break;
        }
    }

    hr = ab->GetSnapshotProperties(snapshotID, &snapshotProperties);
    if(hr != S_OK)
    {
        printf("Failed at GetSnapshotset Stage");
        return 1;
    }

    hr = ab->ExposeSnapshot(snapshotID, NULL, VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY, L"C:\ShadowOff", &pwszExposed);

    wcscpy(existingFilePath,snapshotProperties.m_pwszOriginalVolumeName);
    wcscat(existingFilePath, L"downloads\\aa.exe");

    HANDLE hSourceFile = CreateFile(existingFilePath, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0);

    hr = ab->DeleteSnapshots(SnapshotSetID, VSS_OBJECT_SNAPSHOT_SET ,FALSE, &deletedsnapshots, &nondeletedsnapshots);
    if(hr != S_OK)
    {
        printf("Failed at DeleteSnapshotset Stage");
        return 1;
    }
    return retCode;
}
//copy.cpp:定义控制台应用程序的入口点。
//
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
int-retCode=0;
int i=0;
HRESULT-hr;
Ivssenumbject*pIEnumSnapshots;
IVssBackupComponents*ab;
IVssAsync*pPrepareForBackupResults;
GUID SnapshotSetID=GUID\u NULL;
VSS_对象_道具;
WCHAR wszVolumePathName[最大路径];
GUID快照ID;
wcscpy(wszVolumePathName,L“E:\\”);
VSS_快照_PROP快照属性;
WCHAR existingFilePath[MAX_PATH]=文本(\\temp\\);
WCHAR newFileLocation[MAX_PATH]=文本(“c:\\Users\\”;
LPWCH PWSZ暴露;
int*x;
LONG deletedsnapshots=0;
GUID非删除快照;
TCHAR existingFileLocation[最大路径];
如果(共初始化(空)!=S_正常)
{
printf(“协同初始化失败!\n”);
返回1;
}
hr=CreateVssBackupComponents(&ab);
如果(hr!=S_正常)
{
printf(“CreateVssBackupComponents阶段失败”);
返回1;
}
hr=ab->InitializeForBackup();
如果(hr!=S_正常)
{
printf(“初始化或备份阶段失败”);
std::coutStartSnapshotSet(&SnapshotSetID);
如果(hr!=S_正常)
{
printf(“在StartSnapshotset阶段失败”);
返回1;
}
hr=ab->AddToSnapshotSet(wszVolumePathName、GUID\u NULL和snapshotID);
如果(hr!=S_正常)
{
printf(“在AddtoSnapshotset阶段失败”);
返回1;
}
hr=ab->PrepareForBackup(&pPrepareForBackupResults);
如果(hr!=S_正常)
{
printf(“备份失败”);
}
hr=ab->DoSnapshotSet(&pPrepareForBackupResults);
如果(hr!=S_正常)
{
printf(“在DoSnapshotset阶段失败”);
返回1;
}
while(true){
pPrepareForBackupResults->QueryStatus(&hr,NULL);
如果(hr==VSS\u S\u ASYNC\u FINISHED){
打破
}
}
hr=ab->GetSnapshotProperties(snapshotID和snapshotProperties);
如果(hr!=S_正常)
{
printf(“在GetSnapshotset阶段失败”);
返回1;
}
hr=ab->ExposeSnapshot(快照ID,NULL,VSS\u VOLSNAP\u ATTR\u EXPOSED\u local,L“C:\ShadowOff”,&pwszExposed);
wcscpy(现有文件路径,snapshotProperties.m_pwszOriginalVolumeName);
wcscat(现有文件路径,L“downloads\\aa.exe”);
HANDLE hSourceFile=CreateFile(现有文件路径,通用读取,文件共享读取,文件共享写入,NULL,打开现有,0,0);
hr=ab->DeleteSnapshots(SnapshotSetID、VSS_OBJECT_SNAPSHOT_SET、FALSE、deletedsnapshots和nondeletedsnapshots);
如果(hr!=S_正常)
{
printf(“在DeleteSnapshotset阶段失败”);
返回1;
}
返回代码;
}

对于Windows Vista之前的Windows版本,您必须使用Windows卷影复制SDK:

对于来自Atting的代码,我很抱歉,我离开了这一行,缩进了8个空格,但结果是这样的嘿,我希望我能投票支持你的答案,因为这是书面的,但我没有足够的代表。当我查看Hobocopy源代码时,我得到了提示,其中包含一个目录,其中针对不同的配置显示为inc\winxp和inc\win2003。下载Windows SDK 7.2时,inc文件夹下有两个文件夹,您必须将其复制到项目目录并添加该文件夹的路径。