Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Registryeintrag mit Batch-Skript löschen (https://www.delphipraxis.net/88655-registryeintrag-mit-batch-skript-loeschen.html)

Luckie 18. Mär 2007 23:46


Registryeintrag mit Batch-Skript löschen
 
Ich will mit einem Batch-Skript einen Registryeintrag löschen. mit dem Kommandozeilen Programm regy kein Problem soweit. Jetzt will ich aber auch folgendes:

Beispiel:
Code:
HKCU
  Software
    MichaelPuff
      x
      y
      z
Es soll Schlüssel x gelöscht werden und wenn der Schlüssel MichaelPuff[i] leer ist, soll auch dieser gelöscht werden. Wie kann ich abfragen, ob dieser Schlüssel leer ist? Und wie müsste dann das Batch-Skript aussehen?

So funktioniert es nicht:
Code:
@echo off
reg query HKCU\Software\z /s
if errorlevel == 0 goto :EMPTY
if errorlevel == 1 goto :NOTEMPTY

echo errorlevel

:EMPTY
ECHO "Schlussel z ist leer"
goto END

:NOTEMPTY
ECHO "Schluessel z ist NICHT leer"
goto END

:END
pause
errorlevel ist auch 0 (erfolgreich), wenn der Schlüssel leer ist.

turboPASCAL 19. Mär 2007 08:58

Re: Registryeintrag mit Batch-Skript löschen
 
Ich kenne das Programm regy nicht, gibt es überhaupt ein Errorlevel zurück ?

Warum möchtest du dies nicht über eine eigene Delphianwendung erledigen, ist doch einfach zu machen.

himitsu 19. Mär 2007 09:08

Re: Registryeintrag mit Batch-Skript löschen
 
Ja


regy = registry

programm heißt reg, oder reg.exe


gib mal in deiner Konsole reg ein ... da kommen dann die möglichen Befehle zum Vorschein


vermutlich etwa so?
Code:
reg delete "HKCU\Software\MichaelPuff\x" /f
reg query "HKCU\Software\MichaelPuff"
if errorlevel == 0 goto noDelete
reg delete "HKCU\Software\MichaelPuff" /f
:noDelete
Zitat:

Zitat von turboPASCAL
Warum möchtest du dies nicht über eine eigene Delphianwendung erledigen, ist doch einfach zu machen.

weil dieses schön kleine ist und 'ne exe überdimensioniert sein könnte?

Also vorher kannte ich diese Methode auch nicht.
Hab das Löschen bisher über eine .reg-Datei gelöst
und hab schon immer nach so'ner kleinen Möglichkeit gesucht auch derartige Abfragen durchführen zu können.

[add]
halt ... mußte man nicht erst die größeren errorlevel abfragen und dann die kleineren?
*mal teste*

Luckie 19. Mär 2007 09:14

Re: Registryeintrag mit Batch-Skript löschen
 
Weil ich eigentlich dachte, es wäre mit einem BatchSkript einfacher und wollte mir nicht moch extra einen "Uninstaller" schreiben. Da es mit VBSkript auch nicht so schön geht, werde ich mir wohl doch einen kleinen allgemein gültigen Uninstaller schreiben, dem man nur noch das Programm als Parameter übergibt, so dass ich nicht für jedes Programm einen eigenen Uninstaller schreiben muss.

@himitsu: Auch wenn es keine Unterschlüssel gibt, ist der errorlevel leider 0, wenn ich das richtig in Erinnerung habe. Ich werde deinen Code noch mal ausprobieren.
Code:
reg delete "HKCU\Software\z\x" /f
reg query "HKCU\Software\z"
if errorlevel == 0 goto noDelete
reg delete "HKCU\Software\z" /f
:noDelete
pause
Schlüssel X wird gelöscht, aber Schlüssel z nicht, obwohl er leer ist.

himitsu 19. Mär 2007 09:54

Re: Registryeintrag mit Batch-Skript löschen
 
Liste der Anhänge anzeigen (Anzahl: 1)
der errorlevel ist wohl anders zu verstehen.

nicht
0 = etwas vorhanden
1 = leer

sondern
0 = befehl erfolgreich ausgeführt
1 = fehler

du kannst höchstens prüfen ob ein schlüßel/wert existiert

Code:
reg query "HKCU\Software\MichaelPuff"
if errorlevel == 1 ... schlüssel exisiert nicht
oder besser ausgedrückt:
Fehler: konnte nicht reinsehn, da nicht existiert


Anhang:
erstellt
"HKCU\Software\MichaelPuff1"
"HKCU\Software\MichaelPuff1" > test="123xyz"
"HKCU\Software\MichaelPuff2"
prüft
und löscht die einträge wieder

Luckie 19. Mär 2007 10:05

Re: Registryeintrag mit Batch-Skript löschen
 
Zitat:

Zitat von himitsu
der errorlevel ist wohl anders zu verstehen.

nicht
0 = etwas vorhanden
1 = leer

sondern
0 = befehl erfolgreich ausgeführt
1 = fehler

du kannst höchstens prüfen ob ein schlüßel/wert existiert

Genau. Und das hilft mir nichts. ;) Dann werde ich wohl doch nicht umhinkommen und mir einen eigenen Uninstaller schreiben müssen.

himitsu 19. Mär 2007 10:44

Re: Registryeintrag mit Batch-Skript löschen
 
Funktioniert in jedem Windows:
Code:
@ECHO off

REG delete "HKCU\Software\MichaelPuff\x" /f
IF ERRORLEVEL 1   GOTO 1
ECHO HKEY_CURRENT_USER\Software\MichaelPuff\x erfolgreich gelöscht
GOTO 2
:1
ECHO HKEY_CURRENT_USER\Software\MichaelPuff\x konnte nicht gelöscht werden
:2

ECHO.
ECHO.
ECHO Es sind noch vollgende Einträge vorhanden:
REG query "HKCU\Software\MichaelPuff" /s
ECHO *end*
ECHO.
ECHO Sollen diese ebenfalls gelöscht werden? (samt HKEY_CURRENT_USER\Software\MichaelPuff)
ECHO.
ECHO Wenn nicht, dann drücken sie Strg+C zum abbrechen,
ECHO oder schließen einfach nur dieses Fenster [X].
ECHO.
PAUSE
REG delete "HKCU\Software\MichaelPuff" /f
Ich weiß nicht seit wann SET die Option /P kennt (NT, 2000, oder XP), aber damit wäre 'ne Ja/Nein-Frage möglich:
Code:
@ECHO off

REG delete "HKCU\Software\MichaelPuff\x" /f
IF ERRORLEVEL 1   GOTO 1
ECHO HKEY_CURRENT_USER\Software\MichaelPuff\x erfolgreich gelöscht
GOTO 2
:1
ECHO HKEY_CURRENT_USER\Software\MichaelPuff\x konnte nicht gelöscht werden
:2

ECHO.
ECHO.
ECHO Es sind noch vollgende Einträge vorhanden:
REG query "HKCU\Software\MichaelPuff" /s
ECHO *end*
ECHO.
ECHO Sollen diese ebenfalls gelöscht werden? (samt HKEY_CURRENT_USER\Software\MichaelPuff)
ECHO.
SET /p eingabe=j/n:
IF *%eingabe% == *j  GOTO 3
GOTO 4
:3
REG delete "HKCU\Software\MichaelPuff" /f
:4
[edit]
deutscher Text und Yes/No-Abfrage :stupid:

Luckie 19. Mär 2007 16:29

Re: Registryeintrag mit Batch-Skript löschen
 
Dann muss der Benutzer wieder denken und wie jedr weiß hat es damit nicht jeder Benutzer so. :mrgreen: Ich werde mir dann wohl mal inen kleinen Uninstallerschreiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz