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:
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user