AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [Unit für Delphi >= 2010] Eigene Anwendung neu starten
Thema durchsuchen
Ansicht
Themen-Optionen

[Unit für Delphi >= 2010] Eigene Anwendung neu starten

Ein Thema von Björn Ole · begonnen am 4. Aug 2011 · letzter Beitrag vom 8. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#1

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 6. Aug 2011, 21:30
Warum muss es zwingend eine GUID sein? Per default würde es imho auch der Pfad zu Programm tun. Und für den Fall, das das nicht eindeutig genug ist, kann man ja noch eine GUID setzen. Denk ich.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 09:52
Verzeiht mir meine Unwissenheit, aber wann ist es eigentlich notwendig, dass sich eine Anwendung selbst neu starten muss?
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
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 10:09
KA was du da machst aber das geht mit 1 Zeile.
ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW)

Noch einfacher geht es eigentlich nicht.
Und das sollte ab D1 funktionieren

Zitat:
aber wann ist es eigentlich notwendig, dass sich eine Anwendung selbst neu starten muss
Zum Beispiel bei mir wenn man seiner Anwendung Skins verpaßt hat.

gruss

Geändert von EWeiss ( 7. Aug 2011 um 10:13 Uhr)
  Mit Zitat antworten Zitat
WM_CLOSE

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

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 10:18
Zum Beispiel dann, wenn die Anwendung (aus welchem Grund auch immer) Admin-Rechte braucht.
Oder der Einfachheit halber, um die Initialisierung beim Programmstart nochmal zu durchlaufen, ohne große Änderungen am Code.
Oder bei einer unerwarteten Exception, bei der man nicht genau weiß was gerade schiefgelaufen ist (z.B. DB-Verbindung kaputt).
Oder wenn es ein Update der mitgelieferten DLLs gemacht hat und diese dann "sauber" neu laden soll.

Die letzten 3 treten bei einem sauber programmierten Programm so gut wie gar nicht auf, bei bestehendem Code vielleicht schon.
Delphi programming
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#5

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 16:59
Warum muss es zwingend eine GUID sein? Per default würde es imho auch der Pfad zu Programm tun.
Hmpf, hast Recht. Hab den GUID Parameter entfernt und folgenden Namen gegeben:semaphoreName := 'Local\' + StringReplace(ParamStr(0), '\', '/', [rfReplaceAll]); Allerdings ist ein Editieren der .dpr immer noch notwendig, da ja der Programmstart u.U. abgebrochen werden muss. Oder kann ich das irgendwie sauber aus dem initialization Teil der Unit heraus machen?

KA was du da machst aber das geht mit 1 Zeile.
ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW)
Ja, so funktioniert es auch, allerdings kannst du so nicht garantieren, dass nur höchstens eine Instanz deiner Anwendung läuft. Das ist bei mir leider notwendig.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 17:46
Dann noch 3 zeilen dazu

Delphi-Quellcode:
initialization
  hMutex := CreateMutex(nil, True, 'Meine Anwendung);
if GetLastError = ERROR_ALREADY_EXISTS then
Halt;

finalization
if hMutex <> 0 then
CloseHandle(hMutex)
Soll aber nicht heißen das deine Unit nicht das selbe macht.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#7

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 17:52
Mit deinen 3 Zeilen mehr geht aber dein ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW); nicht mehr, weil der Mutex noch belegt ist.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 19:35
Mit deinen 3 Zeilen mehr geht aber dein ShellExecute(0, 'open', PWideChar(ParamStr(0)), nil, nil, SW_SHOW); nicht mehr, weil der Mutex noch belegt ist.
NÖ geht immer bei mir

Aber egal..

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Björn Ole
Björn Ole

Registriert seit: 10. Jul 2008
166 Beiträge
 
Delphi XE Professional
 
#9

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 7. Aug 2011, 22:38
NÖ geht immer bei mir
Da muss aber bei deinem Betriebssystem was ordentlich schief laufen.

Als Option - Programme laufen erstmal mit geringen Rechten, stelle aber evtl. möglich Administrationoptionen nach Elevation zur Verfügung (siehe WM_CLOSE).
Ah ok, ich glaub jetzt hab ich es verstanden. Im Anhang die neue Version, hat sich alles um einiges vereinfacht. Warum ich da vorher den Umweg über einen Thread gegangen bin... wer weiß
Es besteht die Möglichkeit, dem Restart() einen Boolean mitzugeben, ob mit erhöhten Rechten gestartet werden soll. Programmparameter werden der neuen Instanz weitergegeben.

Folgendes hat sich bzgl. Benutzung geändert:

.dpr
Delphi-Quellcode:
if not Application.InitializeRestarter then
  Exit;
Code zum Neustarten
Delphi-Quellcode:
Application.Restart;
// oder
if not Application.Restart(bElevated) then
  ShowMessage('Fehler beim Neustarten: ' + SysErrorMessage(GetLastError));
Schade, dass ich den Eingangsposting nicht mehr ändern kann... Vor allem, da man die Unit jetzt auch mit älteren Versionen vor 2010 benutzen kann.
Angehängte Dateien
Dateityp: pas uApplicationRestarter.pas (2,9 KB, 23x aufgerufen)

Geändert von Björn Ole ( 7. Aug 2011 um 22:55 Uhr)
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#10

AW: [Unit für Delphi >= 2010] Eigene Anwendung neu starten

  Alt 8. Aug 2011, 00:51
Schreib einen Moderator an, damit er es in die Projekte-Sparte schiebt, dann kannst du dein erstes Posting immer updaten

Viele Grüße,
Florian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:26 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