J'ai ressenti ce besoin il y a quelque temps également. Je l'habitude de simplement conserver le fichier d'installation téléchargé afin de pouvoir l'exécuter pour l'installer, mais de temps en temps, lorsque Cygwin serait mis à jour, le fichier d'installation devenait obsolète. J'ai fini par créer un script Powershell qui s'auto-élève, télécharge l'installateur et lance une mise à niveau silencieuse. Je le garde sur mon bureau et je peux simplement clic droit dessus et "Exécuter avec Powershell" pour effectuer une mise à niveau sur place de tous mes packages Cygwin. La seule interaction utilisateur nécessaire est pour l'UAC et un message "Appuyez sur n'importe quelle touche pour continuer" à la toute fin. Il peut également être exécuté en ligne de commande, car c'est simplement un script.
J'ai mis le code en ligne il y a un moment déjà : http://pastebin.com/wMRctAuL
Je l'ai copié ci-dessous. Je l'ai écrit avec l'aide de quelques questions-réponses sur StackOverflow aussi. :) Tout ce que vous avez à faire pour pouvoir l'exécuter est de activer les scripts Powershell locaux sur votre machine. C'est une solution Windows complète et native.
# Obtenez l'identifiant et le principal de sécurité du compte utilisateur actuel
$monWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
$monWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($monWindowsID)
# Obtenez le principal de sécurité pour le rôle Administrateur
$rôleAdmin=[System.Security.Principal.WindowsBuiltInRole]::Administrator
# Vérifiez si nous exécutons actuellement "en tant qu'administrateur"
if ($monWindowsPrincipal.IsInRole($rôleAdmin)) {
# Nous exécutons "en tant qu'administrateur" - donc changez le titre et la couleur de fond pour le signaler
$Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Élevé)"
$Host.UI.RawUI.BackgroundColor = "DarkBlue"
clear-host
}
else {
# Nous n'exécutons pas "en tant qu'administrateur" - donc relancez en tant qu'administrateur
# Créez un nouvel objet de processus qui lance PowerShell
$nouveauProcessus = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
# Spécifiez le chemin actuel du script et le nom en tant que paramètre
$nouveauProcessus.Arguments = $myInvocation.MyCommand.Definition;
# Indiquez que le processus doit être élevé
$nouveauProcessus.Verb = "runas";
# Démarrez le nouveau processus
[System.Diagnostics.Process]::Start($nouveauProcessus);
# Quittez le processus actuel, non élevé
exit
}
# Exécutez votre code qui doit être élevé ici
(new-object System.Net.WebClient).DownloadFile('http://cygwin.com/setup-x86_64.exe','setup-x86_64.exe')
if (!$?) {
Write-Host "Quelque chose s'est mal passé lors du téléchargement de l'installateur Cygwin."
Write-Host -NoNewLine "Appuyez sur n'importe quelle touche pour continuer..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
exit
}
$p = Start-Process .\setup-x86_64.exe -ArgumentList "--upgrade-also --quiet-mode" -wait -NoNewWindow -PassThru
if ($p.ExitCode -ne 0) {
Write-Host "Échec de la configuration de Cygwin avec une erreur!"
}
Remove-Item .\setup-x86_64.exe
Write-Host -NoNewLine "Appuyez sur n'importe quelle touche pour continuer..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")