Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Trennen von Pfad und Parameter (https://www.delphipraxis.net/125661-trennen-von-pfad-und-parameter.html)

almisoft 9. Dez 2008 19:07


Trennen von Pfad und Parameter
 
Ich schreibe gerade ein Tool, mit dem man Software deinstallieren kann.
Dazu lese ich die Schlüssel in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall aus.

Der Pfad zum Deinstallationsprogramm steht im Wert UninstallString. Beispiele:

a. MsiExec.exe /I{EC4455AB-F155-4CC1-A4C5-88F3777F9886}
b. C:\Windows\system32\Macromed\Flash\uninstall_plugi n.exe
c. D:\Programme\Avira\AntiVir PersonalEdition Classic\SETUP.EXE /REMOVE
d. "C:\Program Files\FRITZ!Box Monitor\install.exe" -d

Leider ist im Pfad auch ggf. ein Parameter mit angegeben.
Shellexecute oder Createprocess zum Ausführen des Deinstallationsprogramms erwartet aber den Pfad und die Parameter getrennt.

Frage:
1. Gibt es ggf. einen anderen Befehl neben Shellexecute oder Createprocess, dem ich den ganzen String übergeben kann?
2. Oder gibt es eine verlässliche Funktion, mit der ich Pfad und Parameter trennen kann?

freak4fun 9. Dez 2008 19:14

Re: Trennen von Pfad und Parameter
 
Sieht so aus als sind das alles Exen. Vielleicht kannste über diesen Weg da was machen. :gruebel:

Edit:
Und ggf. Klassifizieren:
a. Nach /{*} suchen
b. reine exe (ohne Parameter)
c. Nach /* suchen
d. Nach " am Anfang und Ende suchen + -*

* = beliebig viele zeichen

almisoft 9. Dez 2008 19:16

Re: Trennen von Pfad und Parameter
 
Hatte ich mir auch schon überlegt. Aber was ist, wenn einer die Endung weglässt?

freak4fun 9. Dez 2008 19:19

Re: Trennen von Pfad und Parameter
 
Zitat:

Zitat von almisoft
Hatte ich mir auch schon überlegt. Aber was ist, wenn einer die Endung weglässt?

Schauen ob das überhaupt auftreten kann. Ansonsten vielleicht die Möglichkeit einbauen, unbekannte Einträge an dich schicken zu können. (Button: "Unbekannten EIntrag einreichen") Dann kannste das Nachrüsten. Oder eine Konfigurationsdatei. :gruebel:

almisoft 9. Dez 2008 19:20

Re: Trennen von Pfad und Parameter
 
ich wäre mehr für eine elegante Lösung, alles andere scheint eher Flickwerk zu sein.
Habe gerade einen Eintrag ohne Endung gefunden ...

Sir Rufo 9. Dez 2008 19:22

Re: Trennen von Pfad und Parameter
 
Eigentlich ist es doch ganz einfach, mach es so wie Windows das macht:

Der Programmname (Laufwerk, Pfad, Datei) darf keine Leerzeichen enthalten, also ist das erste Leerzeichen der Trenner zwischen Programmname und Parameter.
Ausnahme: Der Programmname muß mit Anführungsstrichen umgeben werden, wenn er doch Leerzeichen enthält.

gelle ;)

EDIT: Obwohl dein Beispiel c da schon wieder abweicht ... aber ob das auch wirklich so in der Registry steht?

Matze 9. Dez 2008 19:23

Re: Trennen von Pfad und Parameter
 
Das würde hier aber nicht funktionieren:
Zitat:

Zitat von almisoft
D:\Programme\Avira\AntiVir PersonalEdition Classic\SETUP.EXE /REMOVE


himitsu 9. Dez 2008 19:24

Re: Trennen von Pfad und Parameter
 
C entspricht leider keiner Konvention und da wird es schwieriger, aber für A+B+D ... hast du die Delphi-Sourcen?

schau dir mal in der System-Unit die Funktion ParamStr (bzw. GetParamStr) an.


notfalls haben die JEDIs dafür auch was (hab da irgendwo mal die Unicodeversionen gesehn ... läßt sich ja nach ANSI umwandeln)


und den Fall von C ... da gibt's eigentlich nur eine Lösung
(ja, ich weiß, Windows läßt sowas leider zu ... ist halt blöd, wenn es viele Fehler einfach übergeht, anstatt sie als Fehler zu behandeln)

erstes Leerzeichen(oder Stringende) suchen
prüfen ob alles vorm Leerzeichen einer Datei entspricht (z.B. mit Funktion FileExists)
wenn nicht, dann nächstes Leerzeichen suchen und wieder wegleichen .... und solange wiederholen, bis der String abgearbeitet ist

almisoft 9. Dez 2008 19:27

Re: Trennen von Pfad und Parameter
 
Zitat:

1. Gibt es ggf. einen anderen Befehl neben Shellexecute oder Createprocess, dem ich den ganzen String übergeben kann?
Mit WinExec ging das ganz gut, weil WinExec alles frisst, aber unter Vista mit aktivierter UAC klappte es dann wieder nicht...

Sir Rufo 9. Dez 2008 19:27

Re: Trennen von Pfad und Parameter
 
Zitat:

Zitat von himitsu
C entspricht leider keiner Konvention und da wird es schwieriger, aber für A+B+D ... hat du die Delphi-Sourcen?

schau dir mal in der System-Unit die Funktionen ParamStr (bzw. GetParamStr) an.


notfalls haben die JEDIs dafür auch was (hab da irgendwo mal die Unicodeversionen gesehn ... läßt sich ja nach ANSI umwandeln)


und den Fall von C ... da gibt's eigentlich nur eine Lösung
(ja, ich weiß, Windows läßt sowas leider zu ... ist halt blöd, wenn es viele Fehler einfach übergeht, anstatt sie als Fehler zu behandeln)

erstes Leerzeichen(oder Stringende) suchen
prüfen ob alles vorm Leerzeichen einer Datei entspricht (z.B. mit Funktion FileExists)
wenn nicht, dann nächstes Leerzeichen suchen und wieder wegleichen .... und solange wiederholen, bis der String abgearbeitet ist

irgendwie fühlte ich eine hand in meinem mund ... so war es doch himitsu der mir das wort aus selbigen nahm :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.
Seite 1 von 2  1 2      

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