Hallo,
ich starte aus meinem Programm heraus über den einfachen Auruf bestimmter Dateien die damit verknüpften Programm. Z.B. öffnet mir ein Aufruf der Datei "Test.odt" diese Datei mit dem SWriter von OpenOffice. Da ich diese Datei aus bestimmten Gründen zuvor in ein temporäres Verzeichnis kopiere und von dort aus aufrufe/öffne, muss sie natürlich nach der Bearbeitung durch den SWriter wieder zurück kopiert werden. Das ganze geschieht (im Moment) so:
Delphi-Quellcode:
Procedure ExecuteProgramm(Const PFileName,Params: String; Warten: Boolean = True);
Var
SEInfo : TShellExecuteInfo;
ExecuteFile : String;
Begin
ExecuteFile:='"'+PFileName+'"';
FillChar(SEInfo,SizeOf(SEInfo),0);
SEInfo.cbSize:=SizeOf(TShellExecuteInfo);
With SEInfo Do
Begin
fMask:= SEE_MASK_NOCLOSEPROCESS;
Wnd:= Application.Handle;
lpFile:= PChar(ExecuteFile);
lpParameters:= PChar(Params);
nShow:= SW_SHOWNORMAL;
End;
If ShellExecuteEx(@SEInfo) Then
If Warten Then
While Not Application.Terminated And
(MsgWaitForMultipleObjects(1,SEInfo.hProcess,False,INFINITE,QS_ALLINPUT)=WAIT_OBJECT_0+1) Do
Application.ProcessMessages;
End;
[...]
Procedure TForm1.Irgendwas;
Begin
ExecuteProgramm('D:\Test.odt','',True);
Handelt es sich um eine
SDI-Anwendung ist das ja kein Problem, da die Awendung fast immer beendet wird, wenn das Dokument geschlossen wird. Ich weiß, es gibt Ausnahmen, was aber nicht diskutiert werden soll. Bei
MDI-Anwendungen läuft es so leider nicht.
So habe ich das Problem, dass der Benutzer z.B. die Test.odt über mein Programm lädt und ich warte. Danach öffnet er eine andere Datei, ohne den SWriter zu beenden. Selbst wenn er die Test.odt schließt, bekomme ich das nicht mit und warte weiter (auf das Ende vom SWriter). Am Ende kann das dazu führen, dass auch immer mehr Instanzen von meinem Programm im Speicher rumlungern. Schlimmer ist aber, dass die Dateien von mehreren Nutzern bearbeitet werden. Die aktuelle Datei steht dann nicht allen zur Verfügung.
Ich hoffe, Ihr könnte mein Problem nachvollziehen. Ansonsten bitte fragen.
Kann mir da jemand helfen?
Gruß, Alex