Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Shellexecute (https://www.delphipraxis.net/158363-shellexecute.html)

WIng2005 15. Feb 2011 17:36

AW: Shellexecute
 
Mmh, was passiert, wenn du

a: in der Update.exe ein delay setzt (1-2s)

oder

b: in der Update.exe prüfst, ob die Ausgangsdatei noch läuft?

In deinem Code startest du erst die Update.exe und beendest dann dein Programm. Das könnte zeitlich problematisch werden.

In meinem Programm hatte ich auch die Möglichkeit, aus der Hauptanwendung (HA) ein Update durchzuführen. Dazu habe ich aus der HA in eine INI geschrieben, dass geupdated werden soll, dann die Starter.exe aufgerufen und Anwendung geschlossen. In der Starter.exe habe ich 2 Dinge geprüft:
1. Liegt laut DB ein Update vor?
2. Steht in der INI ein Hinweis auf ein Update? So konnte ich bei allen Usern getrennt ein Update erzwingen, selbst wenn eigentlich die letzte Version vorlag (nach DB). Dies ermöglichte es mir, gewisse Funktionen mit den Clients durchsprechen, bevor ich Sie veröffentlicht habe.

Capa 15. Feb 2011 17:52

AW: Shellexecute
 
in der update.exe läuft eine schleife solange bis er die project1.exe löschen kann
hatte vorher eine isinuse abfrage drin aber dachte das klappt nicht und hab halt das
mit dem löschen eingebaut, aber das klappt ja genauso wenig ^^


Habs mit createprocess so gemacht
Delphi-Quellcode:
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOW;
  CreateProcess(nil,PCHar(ExtractFilePath(paramstr(0))+'temp\update.exe'),nil,nil,False,0,nil,nil,StartupInfo,ProcessInfo)
end;
Und wie ich gerade sehe hat der auch kein parent mehr nur das der die datei noch nicht löschen will,
nun muss ich nur noch rausfinden warum nicht!

Capa 15. Feb 2011 19:10

AW: Shellexecute
 
Bin durch zufall selbst drauf gekommen.
Der Ordner muss mit übergeben werden wo er es ausführen soll
wenn ich also in der project1.exe beim starten der update.exe
den ordner wo die update.exe liegt mit übergebe dann funzt alles
genauso mach ichs wenn die update.exe die "Neue" Project1.exe aufruft
den ordner '..\' angeben und dann kann ich auch den temp ordner wieder
löschen.
den nur weil ich den nicht löschen konnte bin ich drauf gekommen das mal
zu versuchen.

Delphi-Quellcode:
CreateProcess(nil,PCHar('..\project1.exe'),
              nil,nil,False,0,nil,PChar('..\'),StartupInfo,ProcessInfo)

bzw.

CreateProcess(nil,PCHar(ExtractFilePath(paramstr(0))+'temp\update.exe'),
              nil,nil,False,0,nil,PChar(ExtractFilePath(paramstr(0))+'temp\'),StartupInfo,ProcessInfo)
Danke an alle die geholfen haben :)

Mfg Capa


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:07 Uhr.
Seite 2 von 2     12   

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