AGB  ·  Datenschutz  ·  Impressum  







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

Shellexecute

Ein Thema von Capa · begonnen am 14. Feb 2011 · letzter Beitrag vom 15. Feb 2011
Antwort Antwort
Capa

Registriert seit: 26. Okt 2003
102 Beiträge
 
RAD-Studio 2010 Arc
 
#1

AW: Shellexecute

  Alt 15. Feb 2011, 17:14
mhh die idee ansich ist nicht schlecht aber ich hab halt in meinem programm das updatefenster
schon eingebaut ^^ bzw soll es halt auch so funktionieren das nach nem update gesucht werden
kann wenn das programm schon läuft.

EDIT: Mir ist da gerade was aufgefallen!
wenn ich die project1.exe starte und dann den updateprocess ausführe spinnt die update.exe rum
weil halt nen parent gesetzt ist.
starte ich aber die update.exe macht der das update und startet dann wieder das programm,
wenn ich dann wieder update mache klappt alles genau so wie es soll.
und solange ich das fenster nicht schliesse klappt das alles und ich kann das so oft durchlaufen
lassen wie ich will.

Warum also nicht wenn ich die project1.exe als erstes starte, liegt das vielleicht daran
das die update.exe ne consolenapplication ist?

Geändert von Capa (15. Feb 2011 um 17:31 Uhr)
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#2

AW: Shellexecute

  Alt 15. Feb 2011, 17:35
Hast du dir auch die vielen Parameter angeschaut, die man CreateProcess mitgeben kann?
Ich glaube man konnte da auch einen neuen Prozess erstellen, der dann nicht unter dem tartendem Prozess läuft.
Schau dir mal die structs (=^records) an, die bei MSDN-Library durchsuchenCreateProcess mitgegeben werden.
  Mit Zitat antworten Zitat
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#3

AW: Shellexecute

  Alt 15. Feb 2011, 17:36
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.
MFG
Steffen
  Mit Zitat antworten Zitat
Capa

Registriert seit: 26. Okt 2003
102 Beiträge
 
RAD-Studio 2010 Arc
 
#4

AW: Shellexecute

  Alt 15. Feb 2011, 17:52
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!

Geändert von Capa (15. Feb 2011 um 18:24 Uhr)
  Mit Zitat antworten Zitat
Capa

Registriert seit: 26. Okt 2003
102 Beiträge
 
RAD-Studio 2010 Arc
 
#5

AW: Shellexecute

  Alt 15. Feb 2011, 19:10
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

Geändert von Capa (15. Feb 2011 um 19:13 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 13:50 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