Поскольку в вопросе упоминается файл .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, проверьте доступные классы в Системе.Безопасность.Криптографическое пространство имен.
Затем сценарий проверяет наличие старого файла обновления в папке назначения и вычисляет его хэш MD5.
Далее сравниваются два хэша. Если они не равны, значит, произошло обновление. Затем сценарий использует объект оболочки Windows для копирования файла обновления в папку назначения и извлечения его содержимого. Число 20 является суммой двух опций функции CopyHere() - 4 (которая подавляет диалог прогресса) и 16 (который отвечает "Да на все" любым диалогам, таким образом автоматически перезаписывая существующие файлы).
Наконец, последняя строка удаляет загруженный файл обновления из временного каталога.
Рекомендации
Для получения дополнительной информации об используемых классах, методах и командлетах см. Следующие ссылки: