用Vc怎样做一个自动升级的程序?

解决方案 »

  1.   

    参考RISING的做法.一个程序是专门用来更新程序的。
      

  2.   

    HINTERNET hSession = InternetOpen("MSIE 6.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
    HINTERNET hResponse;
    try{
    hResponse=InternetOpenUrl(hSession,"http://updata.my.com",NULL,NULL,NULL,NULL);
    }catch(...){

    return 0;
    }
    //OutputDebugString("2");
    char Response[1024]="";
    DWORD ResponseLen=sizeof(Response);
    if(InternetReadFile(hResponse,Response,ResponseLen,&ResponseLen))
    {
    if(strcmp(Response,"0")>0){
    HINTERNET hSession2 = InternetOpen("MSIE 6.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 

    void *FileBuff;

    FileBuff=malloc(MAXFILELEN);
    DWORD FileLen=MAXFILELEN;
    HINTERNET hFile;
    try{
    hFile=InternetOpenUrl(hSession2,Response,NULL,NULL,NULL,NULL);
    }catch(...){

    return 0;
    }
    if(InternetReadFile(hFile,FileBuff,FileLen,&FileLen)){ char tempfilename[1024];
    GetTempPath(sizeof(tempfilename),tempfilename);
    GetTempFileName(tempfilename,"rg",0,tempfilename);
    FILE * pFile=fopen(tempfilename,"wb");
    fwrite(FileBuff,1,FileLen,pFile);
    fflush(pFile);
    fclose(pFile);
    strcat(tempfilename," /silent");
    if(WinExec(tempfilename,SW_HIDE)>31)
    {
    "升级完成"; }
    }
    free(FileBuff);
    FileBuff=NULL;
    InternetCloseHandle(hSession2);
    }else{
    RegSetValueEx(hKey,_T("LastUpdateDate"),NULL,type_2,(LPBYTE)CurrentDate,strlen(CurrentDate));
    }
    }
    InternetCloseHandle(hSession);
      

  3.   

    http://www.codeproject.com/internet/urlfile.asp上有一个很好的升级程序,使用的是URLDownloadToCacheFile,这个API比InternetOpen更安全,使用起来也更简单,尤其在下载大型文件,比如几十M,上百M文件。
    这个例子是下载一个文件的,稍一改就可以下载多个文件,比如文件名它是一个变量,你可以用List记录。我就是用这个程序改造的自动更新。好象几个很有名的国内大软件的自动更新,用的都是URLDownloadToCacheFile,稍一跟踪就看到了,比如阿里巴巴的贸易通和旺旺