![]() |
RunProcess ohne EXE sondern mit Datei?
Hai ihr,
ich möchte aus meiner Anwendung heraus eine Datei öffnen und warten bis das Programm mit dem die Dateigeöffnet wurde wieder beendet ist. Ich dachte das könnte ich mit Luckies RunProcess aus diesem ![]() Der Hintergrund ist dieser: Die "Datei" wird aus einer Datenbankgeholt, dann in ein TMP-Verzeichniss geschrieben. Jetzt soll sie mit der verknüpften Anwendung geöffnet werden und danach wieder (wenn sie sich geändert hat) in die Datenbank geschrieben werdern. Hat da einer von euch eine Idee? |
Re: RunProcess ohne EXE sondern mit Datei?
für die öffnung einer datei mit dem standard-programm ist shellexecute vorgesehen.
|
Re: RunProcess ohne EXE sondern mit Datei?
Genauer:
ShellExecute(Handle, 'open', 'FileName', nil, nil, 0); |
Re: RunProcess ohne EXE sondern mit Datei?
Zitat:
Aber was soll mir das bei dem oben beschriebenem Problem helfen? |
Re: RunProcess ohne EXE sondern mit Datei?
dann eben ShellExecuteAndWait.
gibt es in der CodeLib. |
Re: RunProcess ohne EXE sondern mit Datei?
Zitat:
bei verwendung dieser Funktion gibt es leider Probleme. Wenn ich zum Beispiel ein Bild öffne (bei mir mit ACDSee verkünpft) geht alles wie es soll. Wenn ich aber eine MS-Word Datei öffne hängt sich meine Anwendung nach dem beenden von Word auf. |
Re: RunProcess ohne EXE sondern mit Datei?
Ich glaub die JEDI hat auch so ne funktion. weiß grad nicht wie die heißt, bestimmt aber jvShellExecuteAndWait :wink:
|
Re: RunProcess ohne EXE sondern mit Datei?
Meines Wissens ist ShellExecute da nicht für geeignet, ich habe vor Jahren mal ein Datenbankabgleichtool geschrieben und dort habe ich CreateProcess verwendet:
Delphi-Quellcode:
Der Prozess wird gestartet. Dann wird auf das Ende gewartet oder das Warten nach 600 sec abgebrochen.
var StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation; begin FillChar(StartupInfo, SizeOf(TStartupInfo), 0); StartupInfo.cb := Sizeof(TStartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:=SW_HIDE; if CreateProcess(nil, // Anwendungsname PChar(Params), // Parameter nil, // Security nil, // Security False, NORMAL_PRIORITY_CLASS, // Priorität nil, // Environment 'c:\', // Verzeichnis StartupInfo, ProcessInfo) then begin if WaitForSingleObject(ProcessInfo.hProcess, 600000) = WAIT_TIMEOUT then WriteProtokoll('CreateProcess', 'OK ~ FAILED', 'Timeout') ilse WriteProtokoll('CreateProcess', 'OK', ''); CloseHandle(ProcessInfo.hProcess); end else WriteProtokoll('CreateProcess', 'FAILED', ''); ... |
Re: RunProcess ohne EXE sondern mit Datei?
Moin Sharky,
Zitat:
Ausserdem solltest Du den Aufruf in einen eigenen Thread auslagern, da das WaitForSingleObject sonst ja Deinen Hauptthread blockiert. |
Re: RunProcess ohne EXE sondern mit Datei?
Zitat:
das ist ja letztendlich das gleich wie in der Funktion von Luckie aus meinem ersten Beitrag. Dort wird CreateProcess jedoch nicht aufgerufen wenn ich keine .EXE übergebe. Zitat:
unter Verwendung der Funktion ShellExecuteAndWait hängt es nach dem Start einer .DOC Eben sehe ich das es auch bei XLS passiert. Es scheinen also die Office 2003 Anwendungen bei mir zu sein die ein Problem machen. AdobeAcrobat und andere gehen ohne Probleme :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz