AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie kann geprüft werden ob ShellExecute
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann geprüft werden ob ShellExecute

Ein Thema von HPB · begonnen am 6. Apr 2016 · letzter Beitrag vom 7. Apr 2016
Antwort Antwort
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

Wie kann geprüft werden ob ShellExecute

  Alt 6. Apr 2016, 17:29
Guten Tag Delphianer,
ich schreibe eine Datei mit TFileStream auf die Platte.
Dies gelingt auch gut.
Danach öffne ich die Datei mit ShellExecute.
Das gelingt auch.
Nach dem ich Datei anzeigt und geschlossen habe, möchte ich sie wieder löschen.

Mit diesem Code wird nicht mal das Bild angezeigt:
Delphi-Quellcode:
   
pSchreibeStream := TFileStream.Create(pSchreibeDatei, fmCreate);
    dtmdMain.dokumenteDOKUMENT.SaveToStream(pSchreibeStream);
pSchreibeStream.Free;

   ShellExecute(Handle, 'open', PChar(pSchreibeDatei),
      nil, nil, SW_SHOWNORMAL);
  DeleteFile(pSchreibeDatei);
Wenn ich die Zeile: DeleteFile(pSchreibeDatei); Enable dann wird die Datei angezeigt.
Aber wann kann ich sie wieder von der Platte löschen?


Mit Gruß HPB
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Wie kann geprüft werden ob ShellExecute

  Alt 6. Apr 2016, 17:52
Es gibt zig Implementierungen von ExecAndWait, eine davon kann man sicherlich benutzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hoika

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

AW: Wie kann geprüft werden ob ShellExecute

  Alt 6. Apr 2016, 17:59
Hallo,
die Implementierungen verwenden entweder ShellExecuteEx oder CreateProcess/WaitUntil...


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wie kann geprüft werden ob ShellExecute

  Alt 7. Apr 2016, 11:46
"Wie kann geprüft werden ob ShellExecute" es richtig gemacht hat?
Indem man den Rückgabewert von SchellExecute prüft, so wie man das bei allen APIs/Funktionen machen sollte?

"Wie kann geprüft werden ob ShellExecute das gestartete Programm" fertig/bendet ist?
Indem man schaut ob das Programm noch läuft
* z.B. über die ToolsAPI nach der EXE/Instanz suchen
* nach dem Fenster der Anwendung suchen
* CreateProcess benutzen und das Prozess-Handle prüfen
* ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Apr 2016 um 11:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Wie kann geprüft werden ob ShellExecute

  Alt 7. Apr 2016, 12:11
* z.B. über die ToolsAPI nach der EXE/Instanz suchen
* nach dem Fenster der Anwendung suchen
* CreateProcess benutzen und das Prozess-Handle prüfen
* ...
Dann aber wirklich lieber MSDN-Library durchsuchenCreateProcess bzw. MSDN-Library durchsuchenShellExecuteEx mit anschließendem MSDN-Library durchsuchenWaitForSingleObject. Nach dem Fenster oder dem Prozess zu suchen ist meiner Meinung nach nicht ideal. Ist erstens viel aufwändiger und zweitens recht fehleranfällig (was, wenn der User zwei Adobe Reader Instanzen geöffnet hat?, etc.).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wie kann geprüft werden ob ShellExecute

  Alt 7. Apr 2016, 12:25
Und was ist mit SingleInstanz-Anwendungen.
> Dein Gestartetes beendet sich wieder und ein anderer Prozess arbeitet dafür weiter.

Aber ja, grundsätzlich gebe ich dir Recht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#7

AW: Wie kann geprüft werden ob ShellExecute

  Alt 7. Apr 2016, 12:30
Was mich viel mehr verwirrt bzw. was Deine ganz Vorgehensweise in den meisten Fälle scheitern lässt ist aber doch auch die Tatsache, dass eine Datei die gerade geöffnet ist i.d.R. von Windows nicht gelöscht werden kann! Das Löschen der Datei solange sie noch läuft (wenn es eine EXE ist) bzw. geöffnet ist (z.B. wenn es ein Excel-Document ist) muss meiner Meinung nach scheitern!
.....aber das wäre ja dann erst der nächste Fehler der bei Dir auftauche müsste, oder seht Ihr das anders???
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#8

AW: Wie kann geprüft werden ob ShellExecute

  Alt 7. Apr 2016, 12:36
Darum will er ja warten, bis das Programm wieder beendet wurde.

Alternativ kann man auch Windows etwas löschen lassen.
> Delete on rebot
Dann löscht Windows das beim nächsten Windows-Start/Neustart.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#9

AW: Wie kann geprüft werden ob ShellExecute

  Alt 7. Apr 2016, 12:38
MIST.... wer lesen kann ist klar im Vorteil
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Wie kann geprüft werden ob ShellExecute

  Alt 7. Apr 2016, 13:30
Was mich viel mehr verwirrt bzw. was Deine ganz Vorgehensweise in den meisten Fälle scheitern lässt ist aber doch auch die Tatsache, dass eine Datei die gerade geöffnet ist i.d.R. von Windows nicht gelöscht werden kann!
Das kommt drauf an wie die Datei geöffnet wurde. Wenn die Datei mit FILE_SHARE_DELETE geöffnet wurde, kann man sie auch löschen wenn sie vom anderen Programm noch geöffnet ist.
Außerdem lassen die meisten Anwendungen das File-Handle auch nicht geöffnet nachdem sie die Datei eingelesen haben und dann ist die Datei auch löschbar.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  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 08:50 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