Autor Beitrag
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 11.06.09 22:04 
Moin!

Shellexecute, 5. Parameter. :les: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Wolle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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
  // Aufräumen, Ende anzeigen, Vorgang fortsetzen
end;

procedure TSJAutoUpdater.ThreadExecutionProgress(WParam, LParam: Integer);
begin
  // Progressbar aktualisieren
end;
Eins ist dir aber hoffentlich klar:
Durch parallele Packvorgänge verlangsamst du das ganze normalerweise enorm.
Einloggen, um Attachments anzusehen!
Wolle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: 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.