문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자.
== 자동 업그레이드 프로그램 개발 == # 최신 소프트웨어 버전을 비교하여 최신 버전을 설치하는 AutoIt 스크립트 개발 <source lang=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() </source> === 프로그램 기능 설명 === # 현재 버전 확인: version.txt 파일에서 현재 설치된 프로그램의 버전 정보를 읽어옵니다. # 최신 버전 확인: 지정된 웹사이트(sRemoteVersionURL)에서 최신 버전 정보를 가져옵니다. 이 웹사이트에는 버전 번호만 포함된 텍스트 파일이 있어야 합니다 (예: 1.2.3). # 버전 비교: 현재 버전과 최신 버전을 비교하여 최신 버전이 있는지 확인합니다. # 다운로드 및 설치: 최신 버전이 감지되면, 지정된 URL(sRemoteInstallerURL)에서 최신 설치 파일을 다운로드하고 실행합니다. === 사용 전 설정 == # 스크립트 상단에 있는 다음 전역 변수들을 반드시 사용자 환경에 맞게 수정해야 합니다. # $sProgramName: 프로그램 이름입니다. 메시지 박스에 표시됩니다. # $sLocalVersionFile: 로컬 버전 정보 파일 경로입니다. 이 파일은 현재 프로그램이 설치된 폴더 내에 version.txt라는 이름으로 존재해야 하며, 파일 안에는 현재 버전 번호(예: 1.0.0)만 적혀있어야 합니다. # $sRemoteVersionURL: 최신 버전 정보가 있는 URL입니다. 웹 서버에 버전 정보만 담긴 텍스트 파일(예: latest_version.txt)을 올려두고 해당 파일의 URL을 입력합니다. # $sRemoteInstallerURL: 최신 설치 파일 URL입니다. 웹 서버에 최신 프로그램 설치 파일(예: MyProgram_Setup.exe)을 올려두고 해당 파일의 URL을 입력합니다. # $sInstallerSavePath: 설치 파일이 임시로 저장될 경로입니다. 기본값은 Windows 임시 폴더입니다. === 작동 원리 및 권장 사항=== # 버전 파일: 프로그램 설치 시 version.txt 파일을 프로그램 설치 경로에 함께 생성하고, 이 파일에 설치된 프로그램의 현재 버전을 기록해야 합니다. 예를 들어, 1.0.0 또는 1.2.5와 같은 형식으로요. # 웹 서버: 최신 버전 정보 (latest_version.txt)와 최신 설치 파일 (MyProgram_Setup.exe)을 호스팅할 웹 서버가 필요합니다. # 설치 파일: 다운로드된 설치 파일은 일반적으로 자동으로 이전 버전을 제거하고 새 버전을 설치하도록 구성되어 있어야 합니다. AutoIt 스크립트는 단순히 설치 파일을 실행하는 역할만 합니다. # 오류 처리: 인터넷 연결 문제, 파일 다운로드 실패 등 발생할 수 있는 여러 오류에 대한 기본적인 메시지 박스가 포함되어 있습니다. 필요에 따라 더 정교한 오류 처리 로직을 추가할 수 있습니다. # 사용자 경험: 업데이트가 필요한 경우 사용자에게 명확히 알리고, 업데이트 진행 상황을 알리는 메시지 박스를 사용합니다. # 관리자 권한: 프로그램 설치를 위해서는 관리자 권한이 필요할 수 있습니다. 스크립트를 관리자 권한으로 실행해야 할 수도 있습니다. RunWait(@ComSpec & " /c " & $sSavePath, "", @SW_HIDE)와 같이 RunWait 함수를 사용하고 RunAs를 고려할 수도 있습니다. # 백그라운드 실행: 메시지 박스 없이 백그라운드에서 업데이트를 진행하려면 MsgBox 대신 로그 파일에 기록하거나, Run 함수에 @SW_HIDE 플래그를 사용하여 설치 프로세스를 숨길 수 있습니다. * 이 스크립트를 기반으로 프로그램을 개발하고 배포하는 환경에 맞춰 수정하고 기능을 확장할 수 있습니다. [[category:autoit]]
문서 저장 미리 보기 차이 보기 취소