EDUpdater.Tool
1.0.7
dotnet add package EDUpdater.Tool --version 1.0.7
NuGet\Install-Package EDUpdater.Tool -Version 1.0.7
<PackageReference Include="EDUpdater.Tool" Version="1.0.7"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="EDUpdater.Tool" Version="1.0.7" />
<PackageReference Include="EDUpdater.Tool"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add EDUpdater.Tool --version 1.0.7
#r "nuget: EDUpdater.Tool, 1.0.7"
#:package EDUpdater.Tool@1.0.7
#addin nuget:?package=EDUpdater.Tool&version=1.0.7
#tool nuget:?package=EDUpdater.Tool&version=1.0.7
EDUpdater - Kullanım ve Gereksinimler
Bu araç, uzak bir .zip arşivini indirip belirtilen klasöre açarak uygulama/servis güncellemesi yapar. Aşağıda parametreler, çıkış kodları, gerekli izinler ve dikkat edilmesi gerekenler kısa ve net olarak açıklanmıştır.
Komut satırı parametreleri
--zip-url <url>(zorunlu)İndirilecek .zip dosyasının tam HTTP/HTTPS URL'si.
--extract-to <path>(zorunlu)Dosyaların açılacağı hedef klasör (uygulama dizini).
--zip-password <pwd>(opsiyonel)Eğer arşiv parolalıysa buraya parola verin.
--pid <pid>(opsiyonel, tercih edilen yeniden başlatma yöntemi)Güncellemeyi başlatan uygulamanın PID'si. Verilirse önce bu süreç hedeflenir ve yeniden başlatılır.
--service-name <name>(opsiyonel, Windows servisleri için)Windows hizmeti adı. Sağlanırsa güncelleme sonrası
sc stop/sc startile servis kontrolü yapılır.--zip-hash <sha256>(opsiyonel, bütünlük doğrulama)İndirilen zip dosyasının beklenen SHA256 hash değeri (hex). Sağlanırsa indirme sonrası doğrulama yapılır; eşleşmezse güncelleme iptal edilir.
Örnek kullanım
Parolasız zip, PID ile yeniden başlatma:
EDUpdater.exe --zip-url https://example.com/update.zip --extract-to "C:\Program\MyApp" --pid 1234Parolasız zip, SHA256 doğrulama ile:
EDUpdater.exe --zip-url https://example.com/update.zip --extract-to "C:\Program\MyApp" --zip-hash A1B2C3D4...Parolalı zip, servis ile güncelleme (Windows):
EDUpdater.exe --zip-url https://example.com/update.zip --extract-to "C:\Program\MyService" --zip-password secret --service-name MyService
Çalışma mantığı (kısa)
- Log dosyası başlatılır (
%TEMP%/ed_updater_<tarih>.log). - Zip dosyası geçici bir dosyaya streaming olarak indirilir (ilerleme raporlanır).
--zip-hashverilmişse SHA256 doğrulaması yapılır.- İçerik önce ayrı bir geçici klasöre çıkarılır. (Path traversal kontrolleri uygulanır.)
- Çıkarılan dosyalar hedef klasöre taşınır / atomik olarak değiştirilir. Varolan dosyalar
.bakuzantısıyla yedeklenir. - Hata durumunda
.bakdosyalarından otomatik rollback yapılır. - Eğer
--service-nameverilmişse servissc stop(polling ile bekleme) /sc startile kontrol edilir. - Eğer
--pidverilmişse bu PID öncelikli olarak kapatılıp yeniden başlatılır; verilmemise hedef klasör altındaki çalışan süreçler otomatik tespit edilir.
Exit kodları
0– Başarılı güncelleme.1– İndirme hatası (ağ/URL/HTTP problemi) veya kullanıcı iptali (Ctrl+C).2– Arşiv şifreli fakat parola sağlanmadı veya parola hatası.3– Zip açma/okuma hatası (bozuk arşiv veya desteklenmeyen format).4– Açma sırasında genel hata (disk/izin vb.).5– PID doğrulama / PID bulunamadı hatası.6– Dosyaları hedefe taşırken/replace sırasında hata (rollback denenmiştir).7– SHA256 hash doğrulama başarısız (indirilen dosya beklenen hash ile eşleşmiyor).
(Uygulama içinde hata mesajı stderr'e yazılır; hata kodları otomasyon/CI için kullanılabilir.)
Gerekli izinler ve uyarılar
- Servis durdurma/başlatma (
--service-name) ve süreç sonlandırma/kill işlemleri yönetici (elevated) izni gerektirebilir. Windows'tasc stopvesc startkomutları için yeterli hak gerekir. Process.MainModulebilgisine erişim bazı süreçlerde (sistem/protected) engellenebilir; o durumda süreç atlanır ve kullanıcı uyarılır.- Dosyaları değiştirmek için hedef klasörde yazma izinlerinizin olması gerekir.
- ZIP içeriğini hedef klasöre çıkarmadan önce geçici klasöre çıkarıyoruz; ancak yine de hedef dizine yazma izni gereklidir.
Güvenlik notları
- Path traversal (ör.
../) kontrolleri eklidir; zip içindeki entry'ler hedef dışına çıkarılamaz. - İndirme için HTTPS kullanılması önerilir.
--zip-hashparametresi ile indirilen dosyanın bütünlüğü doğrulanabilir (SHA256).- Yedekleme (
.bak) ve otomatik rollback mekanizması kritik dosyalar için koruma sağlar.
Loglama
- Tüm çıktı hem konsola hem
%TEMP%/ed_updater_<tarih>.logdosyasına yazılır. - Arka planda çalıştırma senaryolarında log dosyasını kontrol edin.
Hatalar / Sorun Giderme
- "PID bulunamadı" hatası: Verilen PID artık mevcut değil veya yanlış. Uygulamayı çağıran süreç kendi PID'sini gönderiyorsa
Process.GetCurrentProcess().Iddeğerini kullanın. - Servis komutları başarısız oluyorsa: manuel olarak
sc query <name>ile servis durumunu kontrol edin ve güncelleme için gerekli yetkilerin (Administrator) verildiğinden emin olun. - Zip açma hatası alıyorsanız: arşivin parolalı olup olmadığını, farklı bir şifreleme kullanıp kullanmadığını (AES vb.) kontrol edin.
Tavsiyeler / En iyi uygulamalar
- Mümkünse updater'ı çağıran uygulama kendi PID'sini
--pidile vererek daha güvenilir yeniden başlatma sağlayın. - Büyük arşivler için disk alanı, timeout ve retry ayarlarını ortamınıza göre güncelleyin.
- Üretim ortamında loglama/monitoring ekleyin (ör. dosyaya veya merkezi log servisine yazma).
Bu README kısa ve doğrudan kullanım/kritik gereksinimleri özetler. İstersen bu dosyaya örnek komut satırı betikleri, daha detaylı rollback talimatları veya Windows servis durum bekleme (timeout loop) ekleyebilirim.
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- SharpZipLib (>= 1.4.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.