AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ExecAndWait und OpenOffice

Ein Thema von hoika · begonnen am 27. Jan 2013 · letzter Beitrag vom 27. Jan 2013
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#1

ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 10:39
Hallo #,

folgender bekannter Code funktioniert leider mit OpenOffice (3.4.1) nicht mehr.

Delphi-Quellcode:
function ExecAndWait(const Filename, Params: string;
                     WindowState: word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  { Enclose filename in quotes to take care of
    long filenames with spaces. }

  CmdLine := '"' + Filename + '" ' + Params;
  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;
  Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
                          CREATE_NEW_CONSOLE or
                          NORMAL_PRIORITY_CLASS, NIL,
                          PChar(ExtractFilePath(Filename)),
                          SUInfo, ProcInfo);
  { Wait for it to finish. }
  if Result then
  begin
    MessageBox(0, PChar(IntToStr(ProcInfo.dwProcessId)), '', 0);
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
  end;
end;
Das Problem ist, dass das WaitForSingleObject nicht wartet.
Schaue ich mit die ProzessId von swriter im Task-Manager an,
ist das nicht die gleiche wie ich in der MessageBox ausgebe.
OO erzeugt wohl einen 2. Prozess swriter, der das eigentliche Programm ist.

Was nun ?

Im Netz steht irgendwas von "ParentProcId benutzen",
also die Subprozesse überwachen ?
Ist das die richtige Richtung ?


Danke


Heiko
der
Heiko

Geändert von mkinzler (27. Jan 2013 um 11:10 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 10:42
4.614 Beiträge und Quelltext nicht formatiert?
Würde ja gerne Helfen aber bei solchen Fließtext bekommt man Augenkrebs.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 10:58
Jaja,

habe es gerade gemerkt
Ich durchsuche gerade das Internet zu meinem Problem (45% der Seiten habe ich schon durch ...)

Der Code funktioniert ja bei allen Programmen,
ausser halt OO ;(


Heiko
Heiko

Geändert von hoika (27. Jan 2013 um 11:01 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 11:13
Hallo,

so eine feine Lösung ...

Ich öffne ja OO direkt mit einer Datei.
Heisst die Datei z.B. 1.rtf, legt OO beim Öffnen im gleichen Verzeichnis
die versteckte Datei ".~lock.1.rtf#" (ohne die ") an.

Jetzt heisst es warten und Tee trinken, bis die Lock-Datei weg ist.
Dann hat OO die Datei geschlossen.


Heiko
Heiko

Geändert von hoika (28. Jan 2013 um 07:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 11:28
Heisst die Datei z.B. 1.rtf, legt OO beim Öffnen im gleichen Verzeichnis
die versteckte Datei ".~lock.1.rtf" (ohne die ") an.

Jetzt heisst es warten und Tee trinken, bis die Lock-Datei weg ist.
Und was passiert wenn OO eine Datei auf einem Read-Only Share öffnet?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 13:36
Hallo,

gute Frage. Soll sich jemand anders mit rumärgern.
Bei mir sind es immer Dateien im Temp


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 13:41
Also ich bezweifle, dass der Code von ExecAndWait() komplett ausgearbeitet ist und alle Sonderfälle abdeckt.
In der Jedi Code Library (JCL) gibt es eine vergleichbare Funktion und ich glaube mich erinnern zu können, dass dort geprüft wird ob der Prozess wirklich beendet wurde.

PS:
Hier ist die Funktion ShellExecAndWait http://sourceforge.net/p/jcl/code/38...hell.pas#l1412

Also ich vertraue bei Code, der die Windows API benützt nur der JCL, denn die ist sauber getestet,
und nicht irgendeinem Codeschnippsel aus dem Internet!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 13:46
Hallo,

schöne Funktion.
Aber wie du weiter oben gelesen hast, funktioniert sie bei OpenOffice nicht ...


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 13:54
Aber wie du weiter oben gelesen hast, funktioniert sie bei OpenOffice nicht ...
Hast du das schon getestet?
Bei deiner Funktion fehlt ja z.B. das WaitForInputIdle was dazu führen könnte, dass WaitForSingleObject zu früh aufgerufen wird und dann einfach "durchflutscht".
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: ExecAndWait und OpenOffice

  Alt 27. Jan 2013, 14:10
Hallo,

Ja habe es gerade mal probiert.
Statt ResetMemory hatte ich FillChar genommen.

Wie du weiter oben lesen kannst,
ist die ProzessID aus ShellExecute eine andere
als die, die im Taskmanager angezeigt wird.
OO arbeitet mit einem Thread-Pool und einem globalen Prozess (Java ...).,
da gibt es nichts mit warten.

Heiko
Heiko

Geändert von hoika (28. Jan 2013 um 07:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 Uhr.
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