fix(deinstaller): er brauchte Adminrechte und hatte keine
Ampel / ampel (push) Successful in 30s

Commander: "Ich kann den worker uebrigens immernoch nicht deinstallieren."

Der Screenshot zeigt ZWEI Dinge. Das erste ist erklaerbar: Es lief noch der ALTE
uninstall.ps1 von der letzten Installation - Zeile 2 mit dem kaputten
`if (-not $Force) { if ([System.Windows.Forms.MessageBox]...` . Meine Reparatur
schreibt die Datei erst beim naechsten Installer-Lauf neu.

Das zweite ist MEIN Fehler, und er haette auch die neue Fassung erwischt:

  Remove-Item : Das Element C:\Program Files\Rippy Worker\doc\LICENSE
  kann nicht entfernt werden: Der Zugriff auf den Pfad wurde verweigert.

Der Standard-Zielordner liegt unter "C:\Program Files", und der gehoert nicht dem
Benutzer. Die Installer-.exe ist mit -requireAdmin gebaut und fragt beim Start per
UAC - der Deinstaller hatte nichts Vergleichbares. Er war damit im STANDARDFALL
nutzlos, und mein `rd /s /q` waere genauso aufgelaufen.

Jetzt erhoeht er sich selbst: Schreibprobe im Ordner, Admin-Abfrage, und nur wenn
beides fehlt, ein Neustart per RunAs mit -Force (damit die Bestaetigung nicht
zweimal kommt). GEMESSEN statt angenommen - wer den Worker ins eigene Profil
installiert hat, bekommt gar keine UAC-Frage. An seinem echten Ordner
gegengeprueft: schreibbar=False, istAdmin=False -> Entscheidung "erhoehen".

Der erzeugte Deinstaller ist diesmal komplett nachgestellt worden: parst, und die
Reihenfolge stimmt (Add-Type Zeile 7, MessageBox Zeile 10, Schreibprobe,
Erhoehung, erst dann Loeschen).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-26 15:55:05 +02:00
parent f146f33f5d
commit 5f01aa89fc
3 changed files with 66 additions and 0 deletions
Binary file not shown.
+39
View File
@@ -525,6 +525,45 @@ if (-not `$Force) {
`$ordner = `$PSScriptRoot
# ADMINRECHTE. Der Standard-Zielordner liegt unter "C:\Program Files", und
# der gehört nicht dem Benutzer jedes Remove-Item darin scheitert mit "Der
# Zugriff auf den Pfad wurde verweigert" (Commander-Befund 26.07.2026, an
# HandBrakes doc\LICENSE und Konsorten aufgelaufen). Die Installer-.exe ist mit
# -requireAdmin gebaut und fragt beim Start per UAC; der Deinstaller hatte
# nichts Vergleichbares und war damit im Standardfall nutzlos.
#
# GEMESSEN statt angenommen: Es wird ein Schreibversuch gemacht. Wer den Worker
# ins eigene Profil installiert hat, braucht keine Erhöhung und bekommt auch
# keine UAC-Frage.
`$schreibbar = `$false
try {
`$probe = Join-Path `$ordner ".deinstall-probe"
Set-Content -Path `$probe -Value "x" -ErrorAction Stop
Remove-Item -Force `$probe -ErrorAction SilentlyContinue
`$schreibbar = `$true
} catch { }
`$istAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not `$schreibbar -and -not `$istAdmin) {
# Sich selbst erhöht neu starten. -Force, weil oben schon zugestimmt wurde
# sonst käme die Frage zweimal.
try {
Start-Process powershell.exe -Verb RunAs -ArgumentList @(
"-NoProfile", "-ExecutionPolicy", "Bypass",
"-File", ('"' + `$PSCommandPath + '"'), "-Force")
} catch {
[System.Windows.Forms.MessageBox]::Show(
"Zum Entfernen sind Administratorrechte nötig (der Ordner liegt " +
"unter 'Programme'), und die Anfrage wurde abgelehnt.`n`n" +
"Alternative: PowerShell mit Rechtsklick 'Als Administrator " +
"ausführen' starten und dieses Skript erneut aufrufen.",
"Rippy Worker", 0, [System.Windows.Forms.MessageBoxIcon]::Warning) | Out-Null
}
exit
}
# 1. Alles beenden, was aus diesem Ordner läuft (Tray, celery, HandBrake).
Get-CimInstance Win32_Process | Where-Object {
`$_.ExecutablePath -like "`$ordner*"
+27
View File
@@ -215,6 +215,33 @@ if (-not `$Force) {
`$antwort = Read-Host "Rippy-Worker '$WorkerName' wirklich deinstallieren? (j/n)"
if (`$antwort -ne "j") { Write-Host "Abgebrochen."; exit }
}
# ADMINRECHTE. Der Standard-Zielordner liegt unter "C:\Program Files", und der
# gehört nicht dem Benutzer jedes Remove-Item darin scheitert mit "Der Zugriff
# auf den Pfad wurde verweigert" (Commander-Befund 26.07.2026). Geprüft wird per
# Schreibversuch, nicht per Annahme: Wer ins eigene Profil installiert hat,
# bekommt keine UAC-Frage.
`$schreibbar = `$false
try {
`$probe = Join-Path `$PSScriptRoot ".deinstall-probe"
Set-Content -Path `$probe -Value "x" -ErrorAction Stop
Remove-Item -Force `$probe -ErrorAction SilentlyContinue
`$schreibbar = `$true
} catch { }
`$istAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not `$schreibbar -and -not `$istAdmin) {
Write-Host "Der Ordner liegt unter 'Programme' starte mich mit Administratorrechten neu ..." -ForegroundColor Yellow
try {
Start-Process powershell.exe -Verb RunAs -ArgumentList @(
"-NoProfile", "-ExecutionPolicy", "Bypass",
"-File", ('"' + `$PSCommandPath + '"'), "-Force")
} catch {
Write-Host "FEHLER: Erhöhung abgelehnt. PowerShell mit Rechtsklick 'Als Administrator ausführen' starten und erneut aufrufen." -ForegroundColor Red
}
exit
}
Get-CimInstance Win32_Process | Where-Object {
`$_.ExecutablePath -like "`$PSScriptRoot*"
} | ForEach-Object { Stop-Process -Id `$_.ProcessId -Force -ErrorAction SilentlyContinue }