diff --git a/BesLyric/AutoUpdateThread.cpp b/BesLyric/AutoUpdateThread.cpp index 860f6a0..3d2cb37 100644 --- a/BesLyric/AutoUpdateThread.cpp +++ b/BesLyric/AutoUpdateThread.cpp @@ -67,10 +67,6 @@ DWORD WINAPI AutoUpdateThread::ThreadProc(LPVOID pParam) { AutoUpdateThread* pThread = static_cast(pParam); - //启动之后15秒才开始更新。 - //发布新版本时,即在Realease 下,会自动更新,为了编译后不立刻更新导致版本被自动被替换成较低版本,设置15秒延时,在15秒内关闭则不会被自动替换 - Sleep(15000); - #if _KEEP_UPDATE == 0 pThread->m_bKeepUpdate = false; #endif @@ -122,7 +118,7 @@ bool AutoUpdateThread::AutoUpdate() } } - if(VERSION_NUMBER == strVersion) // 版本一致 + if(VersionCompare(VERSION_NUMBER, strVersion) >= 0 ) // 版本一致 或者 当前版本大于服务器版本(处于开发状态) { m_bHasUpdate = true; return true; @@ -182,6 +178,38 @@ bool AutoUpdateThread::AutoUpdate() return true; } +//比较2个字符串版本号的大小, +int AutoUpdateThread::VersionCompare(const SStringW v1, const SStringW v2) +{ + int nMainNum1 = 0, nSubNum1= 0, nModifidNum1= 0; + int nMainNum2 = 0, nSubNum2= 0, nModifidNum2= 0; + swscanf(v1,L"%d.%d.%d",&nMainNum1, &nSubNum1, &nModifidNum1); + swscanf(v2,L"%d.%d.%d",&nMainNum2, &nSubNum2, &nModifidNum2); + + if(nMainNum1 > nMainNum2) + return 1; + else if(nMainNum1 < nMainNum2) + return -1; + else//主版本号相同 + { + if(nSubNum1 > nSubNum2) + return 1; + else if(nSubNum1 < nSubNum2) + return -1; + else//次版本号相同 + { + if(nModifidNum1 > nModifidNum2) + return 1; + else if(nModifidNum1 < nModifidNum2) + return -1; + else + return 0; + } + } + +} + + /*将Url指向的地址的文件下载到save_as指向的本地文件*/ bool AutoUpdateThread::DownloadFile(const wstring strUrl, const wstring strSaveAs) { @@ -221,6 +249,8 @@ bool AutoUpdateThread::DownloadFile(const wstring strUrl, const wstring strSaveA } + + //发送登录信息(ip地址) void AutoUpdateThread::SendLoginInfo() { diff --git a/BesLyric/AutoUpdateThread.h b/BesLyric/AutoUpdateThread.h index b2eacda..5fd7cf1 100644 --- a/BesLyric/AutoUpdateThread.h +++ b/BesLyric/AutoUpdateThread.h @@ -30,9 +30,13 @@ class AutoUpdateThread : public Singleton //自动更新执行函数 bool AutoUpdate(); + //比较2个字符串版本号的大小, + int VersionCompare(const SStringW v1, const SStringW v2); + //从网络下载文件 bool DownloadFile(const wstring strUrl, const wstring strSaveAs); + //发送登录信息(ip地址) void SendLoginInfo(); diff --git a/Document/AutoUpdate.txt b/Document/AutoUpdate.txt new file mode 100644 index 0000000..fff14df --- /dev/null +++ b/Document/AutoUpdate.txt @@ -0,0 +1,33 @@ +自动升级模块 +==================================================================================== +模块说明: + 该模块实现自动升级功能,在程序启动后启动一个线程来自动升级程序;以静默升级方 +式,在线程启动后,下载最新配置文件,发现有新的版本,则下载最新的可执行文件和最新 +版本信息文件。以重命名的方式,升级文件。 + + +------------------------------------------------------------------------------------- +主要代码文件: +../BesLyric/BesAutoUpdateThread.cpp +../BesLyric/AutoUpdateThread.h + +------------------------------------------------------------------------------------- +升级程序说明: + +服务器上储存着4个文件,这里使用博客园的文件服务器,由于文件类型限制,后缀使用zip,具体 +文件如下: +http://files.cnblogs.com/files/BensonLaur/Beslyric.zip + +http://files.cnblogs.com/files/BensonLaur/lastVersion.zip +http://files.cnblogs.com/files/BensonLaur/BesLyricExe.zip +http://files.cnblogs.com/files/BensonLaur/versionLog.zip + +文件具体说明: +Beslyric.zip,该文件为压缩包文件,储存最新的完整的整个程序,下载链接实际下载文件 + +lastVersion.zip,该文件为txt文件,即 lastVersion.txt,储存最新版本号和最新更新内容, + 自动升级程序时,首先下载这个配置文件 +BesLyricExe.zip,该文件为exe文件,即BesLyric.exe,用于自动更新时下载来替换当前版本 +versionLog.zip,该文件为txt文件,即 versionLog.txt,用于自动更新时下载来替换旧的版 + 本记录。 + diff --git "a/Document/_\347\233\256\345\275\225\350\257\264\346\230\216.txt" "b/Document/_\347\233\256\345\275\225\350\257\264\346\230\216.txt" new file mode 100644 index 0000000..bdc2a47 --- /dev/null +++ "b/Document/_\347\233\256\345\275\225\350\257\264\346\230\216.txt" @@ -0,0 +1,5 @@ +Document + 该目录用于储存说明文档,用于记录不同模块开发过程说明和注意事项 + +Document/AutoUpdate.txt + 自动升级模块 \ No newline at end of file