질문에 .exe 파일이 언급되어 있으므로 Windows를 사용한다고 가정합니다. 그렇다면 PowerShell을 사용하여이 작업을 수행 할 수 있습니다.
스크립트
# Set some variables to hold the source, name and destination of the update file
$UpdateUrl = "http://example.com/"
$UpdateFile = "update.zip"
$Destination = "C:\Path\to\application\"
$TempDir = $Env:Temp + "\"
# Download the update file to a temporary directory
$Client = New-Object System.Net.WebClient
$Client.DownloadFile($UpdateUrl + $UpdateFile, $TempDir + $UpdateFile)
# Calculate MD5 hash of the downloaded update file
$MD5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$Hash1 = [System.BitConverter]::ToString(
$MD5.ComputeHash([System.IO.File]::ReadAllBytes($TempDir + $UpdateFile))
)
# If an old update file exists at the destination, calculate its MD5 hash as well
If (Test-Path ($Destination + $UpdateFile)) {
$Hash2 = [System.BitConverter]::ToString(
$MD5.ComputeHash([System.IO.File]::ReadAllBytes($Destination + $UpdateFile))
)
} Else {
$Hash2 = ""
}
# Compare the MD5 hashes
# If they're not equal, then copy the new update file to the destination and extract its contents
If ($Hash1 -ne $Hash2) {
Copy-Item ($TempDir + $UpdateFile) $Destination
$Shell = New-Object -ComObject Shell.Application
$Shell.NameSpace($Destination).CopyHere(
$Shell.NameSpace($Destination + $UpdateFile).Items(),
20
)
}
# Delete the downloaded update file
Remove-Item ($TempDir + $UpdateFile)
설명
첫 번째 블록은 업데이트 파일의 이름, 소스 및 대상과 다운로드 한 업데이트 파일을 보유 할 임시 디렉토리를 포함하는 일부 변수를 선언합니다. 자신의 경로로 변경할 때 후행 슬래시를 잊지 마십시오.
다음 블록은 WebClient 객체를 사용하여 파일을 임시 디렉토리로 다운로드합니다.
다음으로 스크립트는 다운로드 한 파일의 MD5 해시를 계산합니다. SHA-1과 같은 다른 해시를 계산하려면 System.Security.Cryptography 네임 스페이스 에서 사용 가능한 클래스를 확인하십시오 .
그런 다음 스크립트는 대상 폴더에 이전 업데이트 파일이 있는지 확인하고 MD5 해시를 계산합니다.
다음으로 두 해시를 비교합니다. 동일하지 않으면 업데이트 된 것입니다. 그런 다음 스크립트는 Windows Shell 개체를 사용하여 업데이트 파일을 대상 폴더에 복사하고 내용을 추출합니다. 숫자 20은 CopyHere () 함수-4 (진행 대화 상자를 표시하지 않음)와 16 (모든 대화 상자에 "모두 예"로 응답하여 기존 파일을 자동으로 덮어 씁니다)의 두 가지 옵션의 합계입니다.
마지막으로, 마지막 행은 다운로드 한 업데이트 파일을 temp 디렉토리에서 삭제합니다.
참고 문헌
사용 된 클래스, 메서드 및 cmdlet에 대한 자세한 내용은 다음 링크를 참조하십시오.