Einzelnen Beitrag anzeigen

Benutzerbild von almisoft
almisoft

Registriert seit: 14. Feb 2007
Ort: Berlin
40 Beiträge
 
Delphi 7 Professional
 
#19

Re: Trennen von Pfad und Parameter

  Alt 13. Dez 2008, 16:53
na, so ganz doll war die Sache mit CreateProcess dann doch nicht, denn unter Vista (bei einem anderen Vista auch nicht) startet der Prozess im Hintergrund, was natürlich sehr unschön ist.
Wird unter demselben Vista der Prozess mit ShellExecute aufgerufen, erscheint er im Vordergrund und auch die UAC poppt sauber auf. Also nehme ich zum Aufrufen der Deinstallation-Programme doch ShellExecute. Da muss dann doch der Dateiname vom Parameter getrennt werden, was mir aber jetzt dank himitsu sauber gelungen ist.

Ich habe es aber dann doch etwas anders gemacht und ganz so einfach war es auch nicht. Aber es funzt. Das ganze Programm habe ich angehängt. Der interessante Teil ist hier:
Delphi-Quellcode:
// Kommandozeile in Dateinamen und Parameter Splitten
procedure SplitFileAndParam(const Commandline:string; var Filename,Param:string);
const AnzSuffixe=3;
         Suffixe:array[1..AnzSuffixe] of string=('com','exe','bat');
var L,Pathes:TStringList;
    i,j,k,p:integer;
    FilenameConcat,FilenamePath,FilenameSuffix:string;
    Found:boolean;
begin
  // Commandline an Leerzeichen splitten
  L:=Split(CommandLine,' ',true,false);

  // Pfadvariable auslesen und bei ; splitten
  Pathes:=Split(GetEnvironmentVariable('PATH'),';',true,false);
  Pathes.Insert(0,'');

  // Dateiname Stueck fuer Stueck wieder zusammensetzen bis er existiert
  Filename:='';
  Found:=false;
  for i:=0 to L.Count-1 do if not Found then begin
    FilenameConcat:=RemoveQuotes(Trim(FilenameConcat+' '+L[i]));

    // Existiert die bis jetzt zusammengesetzte Datei?
    if FileExists(FilenameConcat) then begin
      Found:=true;
      Break;
    end;

    // mit vorgesetzten Pfaden aus Umgebungsvariablen probieren
    if not Found and (ExtractFileDrive(FilenameConcat)='') then begin
      for j:=0 to Pathes.Count-1 do if not Found then begin
        FilenamePath:=AddBacklash(Trim(Pathes[j]))+FilenameConcat;
        if FileExists(FilenamePath) then begin
          Found:=true;
          Break;
        end;

        // Falls nicht, mit angefuegter Endung COM,EXE,BAT probieren
        if not Found and (ExtractFileExt(FilenamePath)='') then begin
          for k:=1 to AnzSuffixe do begin
            FilenameSuffix:=FilenamePath+'.'+Suffixe[k];
            if FileExists(FilenameSuffix) then begin
              Found:=true;
              Break;
            end;
          end;
        end;

      end;
    end;
  end;

  if Found then begin
    p:=Pos(FilenameConcat,Commandline)+Length(FilenameConcat);
    while (Copy(Commandline,p,1)<>' ') and (p<Length(CommandLine)) do Inc(p);
    Filename:=Trim(Copy(CommandLine,1,p));
    Param:=Trim(Copy(CommandLine,p+1,Length(CommandLine)));
  end else begin
    Filename:='';
    Param:='';
  end;
end;
Angehängte Dateien
Dateityp: zip test_169.zip (204,6 KB, 11x aufgerufen)
Alexander Miehlke
Alexander Miehlke
Wer Schreibfehler findet, darf sie behalten
  Mit Zitat antworten Zitat