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

Shellexecute

  Alt 14. Feb 2011, 18:30
Hi,
Wie kann ich Eine Datei starten und die hauptdatei schliessen OHNE das die
hauptdatei noch inuse ist. Habs mit Shellexecute versucht aber da tut er die
hauptdatei noch benutzen, den ich kann die datei nicht löschen.

Das ganze ist ein updateprogramm wo die project1.exe eine update.exe aufruft
die project2.exe die geladen wurde und im temp ordner liegt soll dann die
project1.exe ersetzen allerdings ist die project1.exe noch in benutzung
da ich ja die update.exe noch offen hab. erst wenn ich die update.exe beende
und sie nochmal manuell aufrufe funktioniert das mit dem ersetzen.

Kann mir da vielleicht einer weiterhelfen ?

Mfg Capa

Geändert von Capa (14. Feb 2011 um 19:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Shellexecute

  Alt 14. Feb 2011, 18:43
Wenn die alte Version die Update.exe aufruft, kann sie sich doch anschließend beenden. Die Update.exe wartet dann darauf, dass das Programm geschlossen wurde und ersetzt es dann durch die neue Version.
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
Capa

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

AW: Shellexecute

  Alt 14. Feb 2011, 18:51
das hab ich ja versucht aber ein einfaches close oder terminate scheint nicht zu helfen
die project1.exe ist immernoch inuse und kann von der update.exe nicht überschrieben werden.
Delphi-Quellcode:
          try
            ShellExecute(0, nil, PChar(ExtractFilePath(paramstr(0))+'temp\update.exe'), nil, nil, SW_Normal);
          except
            ShowMessage('Update fehlgeschlagen!'+#10+#13+'Konnte Update-Datei nicht finden!');
          end;
          Application.Terminate;
so rufe ich immo die datei auf und beende das programm

Geändert von Capa (14. Feb 2011 um 19:07 Uhr)
  Mit Zitat antworten Zitat
WM_CLOSE

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

AW: Shellexecute

  Alt 14. Feb 2011, 19:55
Hast du es mal außerhalb des Debuggers probiert? Oder hast du evtl keine Schreibrechte(Vista/7)?

Ansonsten könnte es sein, dass ShellExecute das startende Programm als ParentProcess verwendet.
Wenn dem so ist könnte man evtl mit Hier im Forum suchenCreateProcess der Sache näher kommen.
Prüfen sollte man das mit dem Bei Google suchenProcessExplorer können.

Benutzt du zufällig den Bei Google suchenUnlocker? Der zeigt namlich das mit dem Handle verknüpfte Programm an.
  Mit Zitat antworten Zitat
Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
541 Beiträge
 
Delphi 12 Athens
 
#5

AW: Shellexecute

  Alt 14. Feb 2011, 21:49
Hallo,
solche Sachen kann man mit AutoIt-Scripten gut lösen. Sachen wie Dateien ersetzen,umbenennen, Archive entpacken usw sind mit ein paar Zeilen Code hinzubekommen, wenn nötig auch mit graphischer Benutzeroberfläche.

Habe mir schon einige für mich sehr praktische Tools gebastelt; z.B. ein Fernwartungsprogramm auf VNC Basis (nur neue Oberfläche mit unserem Firmenlogo) Automatisierung für Ressourcen-Compiler, Sicherung von Firebird Datenbanken sowie Rebuild für Firebird-Datenbanken (macht eine Datensicherung, dann Shutdown der Datenbank, nennt die alte Datenbankdatei um und baut die Datenbank aus der Sicherung wieder auf).

Gruß

Ralf
Ralf
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Shellexecute

  Alt 14. Feb 2011, 22:11
ShellExecute wird im Falle eines Fehler mit der eventuellen Zieldatei garantiert keine Exception werfen.
Try-Except ist alles komplett fehl am Platz.
> Stattdessen gibt diese Funktion den "Erfolgsbericht" als Result zurück, welches man also auswerten sollte.


Ja, auch ShellExecute könnte eine Exception werfen, aber wenn, dann lag es an einem fehlerhaften Aufruf, wie z.B. einem ungültigen Pointer/String ... also wenn es da doch mal knallt, dann lag es an einem Bediehnungsfehler/Programmierfehler und keiner zu erwartenden Ausnahmebehandlung.
> Try-Except bleibt also falsch und es würde in soeinem Fall die eigentliche Fehlerursache sträflichst verfälschen.
Ein Therapeut entspricht 1024 Gigapeut.
  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 14:44 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