Seize the day

POST : SDP for win32/base lib

자동 업데이트

자동 업데이트는 복잡하게 만든다면 한 없이 복잡하게 만들 수 있지만, 여기서는 가장 단순하게 새로운 버전이 있을 때 사용자에게 알려주고 다운로드 웹페이지를 열어주는 것 까지만 구현해 보겠다. 


class UpdateUtil

{

public:

    static bool GetLocalVersion(CAtlString& version);

    static bool GetServerVersion(CAtlString& version, CAtlString& url);

    static bool IsUpdatable(const CAtlString& localVersion, const CAtlString& serverVersion);

};


구현코드는 sdp 프로젝트를 내려받으면 있다.

http://dev.naver.com/projects/sdp



Easy  레지스트리 프로젝트에서 버전 체크함수가 있다. 

bool CheckNewVersion(bool showbox, CAtlString& url, CAtlString& msg)

{

CAtlString local;

if( !UpdateUtil::GetLocalVersion(local))

{

if( showbox)

{

AfxMessageBox(__L("version.msg.localerror"), MB_SYSTEMMODAL | MB_OK);

}

return false;

}


CAtlString server;

if( !UpdateUtil::GetServerVersion(server, url))

{

if( showbox )

{

AfxMessageBox(__L("version.msg.servererror"), MB_SYSTEMMODAL | MB_OK);

}

return false;

}


msg = __L("version.local");

msg += local;

msg += L"\n";


msg += __L("version.recent");

msg += server;

msg += L"\n\n";


if( ! UpdateUtil::IsUpdatable(local, server) )

{

if( showbox )

{

AfxMessageBox(msg + __L("version.msg.recent"), MB_SYSTEMMODAL | MB_OK);

}

return false;

}


return true;

}


최종적으로 

void CToolbarDlg::_CheckVersion( bool showbox )

{

CAtlString url, msg;

if( CheckNewVersion(showbox, url, msg) )

{

int id = AfxMessageBox(msg + __L("version.msg.homepage") + L"\n\n" + url, MB_SYSTEMMODAL | MB_YESNO);

if(id == IDYES)

{

ShellExecute(m_hWnd, L"open", url, NULL, NULL, SW_SHOWNORMAL);

}

}

}



version.xml의 내용

 <?xml version="1.0" encoding="UTF-8" ?>
   <root>
   <version>1.0.0.8</version>
   <date>2013-08-30</date>
   <url>http://mdiwebma.com/easyregistry/</url>

</root>


업데이트를 새로운 셋업 파일을 자동으로 내려받아서 실행해 주는 방식으로 구현할 경우, 실행화일의 유효성을 검사할 필요가 있다. 설치된 폴더로 개별 파일을 내려받아서 복사하는 방식도 생각해 볼 수 있으나 구현이 복잡하고 예외처리 할 것이 많아서 추천하지는 않는다. 


__L 매크로는 다국어 지원용 매크로인데 src/base/StringBundle.h 를 참고하면 된다. 




top

posted at

2013. 8. 30. 01:31


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크