| Autor |
Beitrag |
Wolle92
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Do 11.06.09 22:01
Hallo,
folgendes: ich will einige Dateien automatisch in einzelne RAR-Archive packen lassen (mit 2 immer gleichen zusätzlichen Dateien in jedem Archiv), und wollte das ganze über die Kommandozeile von WinRAR machen... Aber damit die Dateien auch im "Root" des Archivs sind, muss ich die WinRAR.exe aus dem Ordner, in dem sich die Dateien befinden, heraus starten...
Kann mir jemand sagen, wie ich das hingebogen bekomme?
Grüße,
Wolle
_________________ 1405006117752879898543142606244511569936384000000000.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 11.06.09 22:04
Moin!
Shellexecute, 5. Parameter.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Wolle92 
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Do 11.06.09 22:06
danke
Edit: Kann ich aus dem ShellExecute heraus auch nen Handle zu dem gestarteten Programm hin bekommen, um herauszufinden, wann es wieder beendet ist? Um dann nämlich 2 Dateien gleichzeitig zu packen, und wenn eine fertig ist, fängt an ihrer stelle ne neue an...
_________________ 1405006117752879898543142606244511569936384000000000.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 11.06.09 22:55
Dafür nimm ShellExecuteEx oder CreateProcess. Zum Warten damit gibts auch was in der Library soweit ich mich erinnere. 
|
|
Wolle92 
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Do 11.06.09 23:25
Mhm, wenn ich jetzt aber 2 Prozesse habe, kann ich ja nicht mit WaitForSingleObject darauf warten, das einer von beiden durch ist...
Wie kann ich denn beide Prozesse gleichzeitig überwachen und sobald einer beendet ist, nen neuen an seiner stelle starten?
_________________ 1405006117752879898543142606244511569936384000000000.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 11.06.09 23:56
Durch einen Thread für jeden Prozess. (Theoretisch könntest du auch per Polling auf beide Prozesse warten.) Ich habe das gerade für meine Updaterutils geschrieben, ich hänge die Datei mit dem Thread einmal an. Ist eigentlich auch gar nix besonderes. Die Fortschrittsanzeige brauchst du vermutlich auch gar nicht. Angesprochen habe ich das dann so: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| ExecThread := TSJExecuteWaitThread.Create(True); ExecThread.FreeOnTerminate := True; ExecThread.Params := '/update stage1 ' + ...; ExecThread.OnExecutionFinished := ThreadExecutionFinished; ExecThread.OnProgressMessage := ThreadExecutionProgress; ExecThread.Resume;
...
procedure TSJAutoUpdater.ThreadExecutionFinished; begin end;
procedure TSJAutoUpdater.ThreadExecutionProgress(WParam, LParam: Integer); begin end; | Eins ist dir aber hoffentlich klar:
Durch parallele Packvorgänge verlangsamst du das ganze normalerweise enorm.
Einloggen, um Attachments anzusehen!
|
|
Wolle92 
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Fr 12.06.09 00:00
Hab das jetzt mit WaitForMultipleObjects gelöst...
Von wegen verlangsamen: Das hab ich mir vorher angesehen, wenn ein WinRAR packt, liegt meine CPU-Auslastung auf allen 4 Kernen bei ~70%, wenn zwei packen, liegt sie überall bei 99-100%, also, etwas schneller ist es...
_________________ 1405006117752879898543142606244511569936384000000000.
|
|