Câu hỏi Cập nhật tự động chung các ứng dụng dành cho máy tính để bàn


Có một ứng dụng sẽ âm thầm cập nhật một thư mục địa phương có chứa tất cả các tập tin trong một thư mục web? Hoặc thậm chí tốt hơn, nếu có tệp .zip, nó sẽ trích xuất các tệp vào thư mục được chỉ định?

Tôi có một ứng dụng web đơn giản trên máy tính để bàn (HTML / Javascript sử dụng jQuery) trong một thư mục cục bộ và bất cứ khi nào nó được cập nhật, tôi muốn các máy tính trong văn phòng của chúng tôi tự động cài đặt bản cập nhật bằng cách tải xuống một cách tự động 'latest.zip' Tải xuống HTTP, không tải xuống FTP) và cho phép trình cập nhật sao chép các tệp vào thư mục ứng dụng.

Tôi đã được tìm kiếm nhưng tất cả tôi thấy là đồng bộ hóa tập tin đó là hai chiều và chương trình đó là quá phức tạp để sử dụng hoặc quá nặng. Mục tiêu của tôi là có thể âm thầm cập nhật thư mục ứng dụng với tương tác người dùng rất tối thiểu. Nhưng kể từ khi JavaScript không thể ghi trên ổ đĩa cứng, nó cần phải được thực hiện bằng cách sử dụng một ứng dụng khác (tập tin exe) sẽ chạy theo định kỳ.

Có lẽ có một cái gì đó giống như một ứng dụng updater chung, trong đó bạn có thể đặt một địa chỉ web của các tập tin và thư mục địa phương nơi các tập tin cần được sao chép?


0
2018-02-17 13:00


gốc


Không chắc chắn bạn đang tìm kiếm chương trình nào, nhưng bạn đã kiểm tra chưa ninite.com? - Kruug


Các câu trả lời:


Kể từ khi câu hỏi đề cập đến một tập tin exe, tôi giả sử bạn đang ở trên Windows. Nếu vậy, bạn có thể làm điều này với PowerShell.

Kịch bản

# 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)

Giải trình

Khối đầu tiên khai báo một số biến chứa tên, nguồn và đích của tệp cập nhật, cũng như một thư mục tạm thời để giữ tệp cập nhật đã tải xuống. Đừng quên dấu gạch chéo sau khi bạn thay đổi chúng thành đường dẫn của riêng bạn.

Khối tiếp theo sử dụng đối tượng WebClient để tải tệp xuống thư mục tạm thời.

Tiếp theo, kịch bản tính toán hàm băm MD5 của tệp đã tải xuống. Nếu bạn muốn tính toán một hàm băm khác, như SHA-1, hãy xem các lớp có sẵn trong Không gian tên System.Security.Cryptography.

Sau đó, tập lệnh sẽ kiểm tra sự tồn tại của một tệp cập nhật cũ tại thư mục đích và tính toán giá trị băm MD5 của nó.

Tiếp theo, hai băm được so sánh. Nếu chúng không bằng nhau, điều đó có nghĩa là đã có bản cập nhật. Kịch bản lệnh sau đó sử dụng đối tượng Windows Shell để sao chép tệp cập nhật vào thư mục đích và trích xuất nội dung của nó. Số 20 là tổng của hai tùy chọn của hàm CopyHere () - 4 (mà sẽ tắt hộp thoại tiến trình) và 16 (trả lời "Có cho tất cả" cho bất kỳ hộp thoại nào, do đó tự động ghi đè lên các tệp hiện có).

Cuối cùng, dòng cuối cùng sẽ xóa tệp cập nhật đã tải xuống khỏi thư mục tạm thời.


Tài liệu tham khảo

Để biết thêm thông tin về các lớp, các phương thức và các lệnh ghép ngắn được sử dụng, hãy xem các liên kết sau:


1
2018-02-18 08:35



Mã của bạn có trích xuất nội dung không? Có thể so sánh "update.zip" hiện có bên trong đường dẫn với đường dẫn đã tải xuống không? - rationalboss
@rationalboss Có, nó trích xuất nội dung. Tôi đã thêm giải thích nhanh về tập lệnh vào bài đăng của mình. Làm thế nào chính xác bạn muốn so sánh các tập tin ZIP - kích thước, ngày sửa đổi, một số loại hash / checksum, cái gì khác? - Indrek
băm / kiểm tra :) - rationalboss
@rationalboss Giả sử MD5 là tốt, tôi đã cập nhật kịch bản trong bài đăng của tôi để so sánh tệp đã tải xuống với tệp cập nhật hiện có trong thư mục đích và chỉ trích xuất tệp nếu chúng khác nhau. - Indrek


Những rắc rối tôi thấy là máy tính khách hàng của bạn không có quyền truy cập vào thư mục địa phương của bạn vì vậy không có cách nào của họ biết đó là thời gian. Nếu nó nhỏ, bạn có thể tự động tải xuống một bản sao mới thường xuyên, hoặc có thể tạo một kịch bản shell / bash mà chúng sử dụng để khởi chạy nó, nó sẽ kiểm tra và tải xuống phiên bản mới mỗi khi chúng mở ra.

Trong trường hợp sử dụng, nếu bạn đang sử dụng Windows, hãy xem ứng dụng RealtimeSync đi kèm với FreeFileSync, bạn đặt nó theo dõi một thư mục để thay đổi và sau đó có thể thực thi lệnh khi các thay đổi được phát hiện - chẳng hạn như một lô để tải chúng lên cho các máy khác tải xuống.

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


0
2018-02-17 14:19



Nhưng các tập tin không thể truy cập thông qua NAS. Nó có thể truy cập thông qua http. Điều đó có thể thực hiện được thông qua FreeFileSync không? - rationalboss
Không, đó là rắc rối tôi thấy trong đoạn đầu tiên. Bạn sẽ phải tải xuống tệp cập nhật trước khi bạn biết nếu nó đã được cập nhật. FFS chỉ có thể tải lên tệp cho bạn khi bạn thực hiện chỉnh sửa và thậm chí chỉ sau đó kết hợp với một tập lệnh khác để thực hiện việc tải lên. - Patabugen