데스크톱 응용 프로그램의 일반적인 자동 업데이트


0

웹 디렉토리의 모든 파일을 포함하는 로컬 폴더를 자동으로 업데이트하는 응용 프로그램이 있습니까? 또는 .zip 파일이 있으면 지정된 폴더에 파일을 추출합니까?

로컬 폴더에 간단한 데스크탑 웹 응용 프로그램 (jQuery를 사용하는 HTML / Javascript)이 있으며 업데이트 될 때마다 사무실의 컴퓨터가 'latest.zip'과 같은 것을 자동으로 다운로드하여 업데이트를 자동으로 설치하고 싶습니다 FTP 다운로드가 아닌 HTTP 다운로드)를 사용하여 업데이터가 파일을 응용 프로그램 디렉토리에 복사하도록합니다.

검색 중이지만 양방향 및 파일 사용이 너무 복잡하여 사용하기에 너무 복잡하거나 너무 무거운 파일 동기화입니다. 저의 목표는 최소한의 사용자 상호 작용으로 응용 프로그램 디렉토리를 자동으로 업데이트하는 것입니다. 그러나 JavaScript는 하드 드라이브에 쓸 수 없으므로 주기적으로 실행되는 다른 응용 프로그램 (exe 파일)을 사용하여 수행해야합니다.

파일의 웹 주소와 파일을 복사 할 로컬 디렉토리를 넣을 수있는 일반 업데이터 응용 프로그램과 같은 것이 있습니까?


어떤 프로그램을 찾고 있는지 잘 모르지만 ninite.com 을 확인 습니까?
Kruug

답변:


1

질문에 .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에 대한 자세한 내용은 다음 링크를 참조하십시오.


코드도 내용을 추출합니까? 경로 내의 기존 "update.zip"을 다운로드 한 경로와 비교할 수 있습니까?
rationalboss

@rationalboss 네, 내용을 추출합니다. 내 게시물에 스크립트에 대한 간단한 설명을 추가했습니다. ZIP 파일 (크기, 수정 날짜, 일종의 해시 / 체크섬 등)을 정확히 어떻게 비교 하시겠습니까?
Indrek

hash / checksum :)
rationalboss

1
@rationalboss MD5가 괜찮다고 가정하면, 다운로드 한 파일을 대상 디렉토리의 기존 업데이트 파일과 비교하고 다른 경우에만 추출하기 위해 게시물의 스크립트를 업데이트했습니다.
Indrek 2019

0

내가 보는 문제는 클라이언트 컴퓨터가 로컬 폴더에 액세스 할 수 없으므로 시간을 알 수있는 방법이 없다는 것입니다. 크기가 작은 경우 어쨌든 자동으로 새 사본을 자동으로 다운로드하거나 실행할 때 사용하는 쉘 / bash 스크립트를 만들 수 있습니다.이 스크립트는 파일을 열 때마다 새 버전을 확인하고 다운로드합니다.

사용중인 경우 Windows를 사용중인 경우 FreeFileSync와 함께 제공되는 RealtimeSync 응용 프로그램을 살펴보면 폴더를 변경하도록 모니터링하도록 설정 한 다음 변경 사항이 발견 될 때 명령을 실행할 수 있습니다 (예 : 배치) 다른 컴퓨터에서 다운로드 할 수 있도록 스크립트를 업로드하십시오.

http://sourceforge.net/projects/freefilesync/


그러나 파일은 NAS를 통해 액세스 할 수 없습니다. http를 통해 액세스 할 수 있습니다. FreeFileSync를 통해 가능합니까?
rationalboss

아니요, 첫 번째 단락에서 볼 수있는 문제입니다. 업데이트 파일이 업데이트되었는지 확인하기 전에 업데이트 파일을 다운로드해야합니다. FFS는 편집 한 후에 만 ​​파일을 업로드 할 수 있으며 업로드를 수행하기 위해 다른 스크립트와 함께 사용해야합니다.
Patabugen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.