메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Autoit 자동 업그레이드 프로그램 개발

데브카페

자동 업그레이드 프로그램 개발

  1. 최신 소프트웨어 버전을 비교하여 최신 버전을 설치하는 AutoIt 스크립트 개발
#include <File.au3>

; --- 설정 시작 ---
Global $sProgramName = "내 프로그램" ; 프로그램 이름 (설치될 폴더 이름 등)
Global $sLocalVersionFile = @ScriptDir & "\version.txt" ; 로컬 버전 정보 파일 경로
Global $sRemoteVersionURL = "http://www.yourwebsite.com/latest_version.txt" ; 최신 버전 정보가 있는 URL
Global $sRemoteInstallerURL = "http://www.yourwebsite.com/MyProgram_Setup.exe" ; 최신 설치 파일 URL
Global $sInstallerSavePath = @TempDir & "\MyProgram_Setup.exe" ; 설치 파일 다운로드 경로
; --- 설정 끝 ---

Func Main()
    Local $sCurrentVersion = GetCurrentVersion()
    Local $sLatestVersion = GetLatestVersion()

    If $sCurrentVersion = "" Then
        MsgBox(64, $sProgramName & " 업데이트", "현재 프로그램 버전 정보를 찾을 수 없습니다. 처음 설치하거나 수동 업데이트가 필요할 수 있습니다.")
        InstallLatestVersion($sRemoteInstallerURL, $sInstallerSavePath)
        Exit
    EndIf

    If $sLatestVersion = "" Then
        MsgBox(48, $sProgramName & " 업데이트", "최신 버전 정보를 가져올 수 없습니다. 인터넷 연결을 확인하거나 나중에 다시 시도하십시오.")
        Exit
    EndIf

    If VersionCompare($sCurrentVersion, $sLatestVersion) < 0 Then
        MsgBox(64, $sProgramName & " 업데이트", "새로운 버전(" & $sLatestVersion & ")이 감지되었습니다. 현재 버전: " & $sCurrentVersion & @CRLF & "업데이트를 진행합니다.")
        InstallLatestVersion($sRemoteInstallerURL, $sInstallerSavePath)
    Else
        MsgBox(64, $sProgramName & " 업데이트", "현재 최신 버전입니다. (" & $sCurrentVersion & ")")
    EndIf
EndFunc

Func GetCurrentVersion()
    ; 로컬 버전 파일에서 버전 정보 읽기
    If FileExists($sLocalVersionFile) Then
        Return FileReadLine($sLocalVersionFile, 1)
    EndIf
    Return ""
EndFunc

Func GetLatestVersion()
    ; 원격 URL에서 최신 버전 정보 읽기
    Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
    If Not IsObj($oHTTP) Then Return SetError(1, 0, "")
    $oHTTP.Open("GET", $sRemoteVersionURL, False)
    $oHTTP.Send()
    If $oHTTP.Status = 200 Then
        Return StringStripWS($oHTTP.ResponseText, 3) ; 공백 제거
    EndIf
    Return SetError(1, $oHTTP.Status, "")
EndFunc

Func VersionCompare($sVer1, $sVer2)
    ; 버전 문자열 비교 (예: 1.0.10 < 1.0.11, 1.1.0 > 1.0.10)
    Local $aVer1 = StringSplit($sVer1, ".")
    Local $aVer2 = StringSplit($sVer2, ".")

    For $i = 1 To Max($aVer1[0], $aVer2[0])
        Local $iNum1 = ($i <= $aVer1[0]) ? Int($aVer1[$i]) : 0
        Local $iNum2 = ($i <= $aVer2[0]) ? Int($aVer2[$i]) : 0

        If $iNum1 < $iNum2 Then Return -1
        If $iNum1 > $iNum2 Then Return 1
    Next
    Return 0 ; 두 버전이 같음
EndFunc

Func InstallLatestVersion($sURL, $sSavePath)
    MsgBox(64, $sProgramName & " 업데이트", "최신 버전 설치 파일을 다운로드합니다. 잠시 기다려주십시오.")
    Local $bDownloaded = _INetGetSource($sURL, $sSavePath)

    If Not $bDownloaded Then
        MsgBox(16, $sProgramName & " 업데이트", "설치 파일 다운로드에 실패했습니다. 인터넷 연결을 확인하거나 나중에 다시 시도하십시오.")
        Return
    EndIf

    MsgBox(64, $sProgramName & " 업데이트", "설치 파일을 다운로드했습니다. 설치를 시작합니다.")
    Run($sSavePath)
EndFunc

; INetGetSource 함수는 AutoIt 기본 함수가 아님, _INetGetSource 사용
; AutoIt 도움말 파일에서 InetGet 또는 _INetGetSource를 검색하여 사용법 확인
Func _INetGetSource($sSource, $sDest)
    Local $iResult = InetGet($sSource, $sDest, 1) ; 1은 존재하면 덮어쓰기
    Return ($iResult = 1) ; 성공 시 1 반환
EndFunc

Main()

프로그램 기능 설명

  1. 현재 버전 확인: version.txt 파일에서 현재 설치된 프로그램의 버전 정보를 읽어옵니다.
  2. 최신 버전 확인: 지정된 웹사이트(sRemoteVersionURL)에서 최신 버전 정보를 가져옵니다. 이 웹사이트에는 버전 번호만 포함된 텍스트 파일이 있어야 합니다 (예: 1.2.3).
# 버전 비교: 현재 버전과 최신 버전을 비교하여 최신 버전이 있는지 확인합니다.
# 다운로드 및 설치: 최신 버전이 감지되면, 지정된 URL(sRemoteInstallerURL)에서 최신 설치 파일을 다운로드하고 실행합니다.

= 사용 전 설정

  1. 스크립트 상단에 있는 다음 전역 변수들을 반드시 사용자 환경에 맞게 수정해야 합니다.
  2. $sProgramName: 프로그램 이름입니다. 메시지 박스에 표시됩니다.
  3. $sLocalVersionFile: 로컬 버전 정보 파일 경로입니다. 이 파일은 현재 프로그램이 설치된 폴더 내에 version.txt라는 이름으로 존재해야 하며, 파일 안에는 현재 버전 번호(예: 1.0.0)만 적혀있어야 합니다.
  4. $sRemoteVersionURL: 최신 버전 정보가 있는 URL입니다. 웹 서버에 버전 정보만 담긴 텍스트 파일(예: latest_version.txt)을 올려두고 해당 파일의 URL을 입력합니다.
  5. $sRemoteInstallerURL: 최신 설치 파일 URL입니다. 웹 서버에 최신 프로그램 설치 파일(예: MyProgram_Setup.exe)을 올려두고 해당 파일의 URL을 입력합니다.
# $sInstallerSavePath: 설치 파일이 임시로 저장될 경로입니다. 기본값은 Windows 임시 폴더입니다.

작동 원리 및 권장 사항

  1. 버전 파일: 프로그램 설치 시 version.txt 파일을 프로그램 설치 경로에 함께 생성하고, 이 파일에 설치된 프로그램의 현재 버전을 기록해야 합니다. 예를 들어, 1.0.0 또는 1.2.5와 같은 형식으로요.
# 웹 서버: 최신 버전 정보 (latest_version.txt)와 최신 설치 파일 (MyProgram_Setup.exe)을 호스팅할 웹 서버가 필요합니다.
# 설치 파일: 다운로드된 설치 파일은 일반적으로 자동으로 이전 버전을 제거하고 새 버전을 설치하도록 구성되어 있어야 합니다. AutoIt 스크립트는 단순히 설치 파일을 실행하는 역할만 합니다.
  1. 오류 처리: 인터넷 연결 문제, 파일 다운로드 실패 등 발생할 수 있는 여러 오류에 대한 기본적인 메시지 박스가 포함되어 있습니다. 필요에 따라 더 정교한 오류 처리 로직을 추가할 수 있습니다.
  2. 사용자 경험: 업데이트가 필요한 경우 사용자에게 명확히 알리고, 업데이트 진행 상황을 알리는 메시지 박스를 사용합니다.
  3. 관리자 권한: 프로그램 설치를 위해서는 관리자 권한이 필요할 수 있습니다. 스크립트를 관리자 권한으로 실행해야 할 수도 있습니다. RunWait(@ComSpec & " /c " & $sSavePath, "", @SW_HIDE)와 같이 RunWait 함수를 사용하고 RunAs를 고려할 수도 있습니다.
  4. 백그라운드 실행: 메시지 박스 없이 백그라운드에서 업데이트를 진행하려면 MsgBox 대신 로그 파일에 기록하거나, Run 함수에 @SW_HIDE 플래그를 사용하여 설치 프로세스를 숨길 수 있습니다.
  • 이 스크립트를 기반으로 프로그램을 개발하고 배포하는 환경에 맞춰 수정하고 기능을 확장할 수 있습니다.

Comments