我做一个客户端软件,是绿色软件,不许安装,只有一个很小的.exe文件,要自动升级,请问如何做?最好给点代码。

解决方案 »

  1.   

    1、先跟服务端的配置文件匹配版本号,如果低于最新版本开始升级。
    2、GetInternetFile(strUpdateUrl,strOutLocal); //strUpdateUrl:服务端新版本路径。
                                                  //strOutLocal:本地版本路径。int GetInternetFile(CString szUrl, CString szFileName)
    {
        DWORD dwFlags;
    InternetGetConnectedState(&dwFlags, 0);
    CHAR strAgent[64];
    memset(strAgent,0,sizeof(strAgent));
    sprintf(strAgent, "Agent%ld", timeGetTime());
    HINTERNET hOpen;
    if(!(dwFlags & INTERNET_CONNECTION_PROXY))
    hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0);
    else
    hOpen = InternetOpenA(strAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if(!hOpen)
    {
    return -1;
    }
    DWORD dwSize;
    CHAR   szHead[] = "Accept: */*\r\n\r\n";
    VOID* szTemp[16384];
    HINTERNET  hConnect;
    CFile file;
    if ( !(hConnect = InternetOpenUrlA ( hOpen, szUrl, szHead,
     lstrlenA (szHead), INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0)))
    {
    InternetCloseHandle(hOpen);
        return -1;
    }
    if  (file.Open(szFileName,CFile::modeWrite|CFile::modeCreate)==FALSE )
    {
      return -1;
    }
    DWORD dwByteToRead = 0;
    DWORD dwSizeOfRq = 4;
    DWORD dwBytes = 0;
        if (!HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, 
                      (LPVOID)&dwByteToRead, &dwSizeOfRq, NULL))
    {
    dwByteToRead = 0;
    }
    memset(szTemp,0,sizeof(szTemp));
    do
    {
    if (!InternetReadFile (hConnect, szTemp, 16384,  &dwSize))
    {
    file.Close();
    return -1;
    }
    if (dwSize==0)
    {
    break;
    }
    else
    {
    file.Write(szTemp,dwSize);
    }
    }while (TRUE);
    file.Close();
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hOpen); return 1;
    }
      

  2.   

    www.vckbase.com里面有个这样的例子
      

  3.   

    这里有免费的.兄弟. 
    www.aslike.net