Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Update Komponente
chickenfigt1989 - Mo 11.10.10 20:46
Titel: Update Komponente
Hallo
hab ne update komponente die auch wunderbar funktioniert.
allerdings ladet die nur das Update runter.
Ich will aber das dass Programm geschloßen wird, und das Update gestartet wird.
Wie realisier ich das??
mfg
elundril - Mo 11.10.10 20:50
Setz einfach das Feld "CloseOnUpdate" auf True. :roll:
Merkst du was? Wir können dir nix darüber sagen wenn wir nicht wissen was für eine Komponente du verwendest und wie du sie verwendest... Immer wieder das selbe spiel mit dir.
lg elundril
chickenfigt1989 - Mo 11.10.10 20:56
Sorry hab vergessen zu erwähnen das es eine selbst geschriebene Komponente ist.
Hab die komponente mal als Anhang dazugepackt
mfg
chickenfigt1989 - Mo 11.10.10 21:10
Oke Danke werd ich mir Morgen bei gelegenheit anschauen.
Also bei mein Pc hab ich Vista drauf und da gehts, aber ich schaus mir trotzdem an und werds ggf ändern
lg
jaenicke - Mo 11.10.10 21:55
Wenn du per UAC Adminrechte angefordert hast, geben diese Quelltexte meistens trotzdem "kein Admin" zurück. Man kann es schon so machen, aber der sah mir nicht danach aus. ;-)
Abgesehen davon ist der andere fast nur eine Zeile.
Delete - Mo 11.10.10 22:38
Man beachte aber den Reamarks-Abschnitt:
Zitat: |
Remarks
This function is a wrapper for CheckTokenMembership. It is recommended to call that function directly to determine Administrator group status rather than calling IsUserAnAdmin.
Note This function is available through Windows Vista. It might be altered or unavailable in subsequent versions of Windows. |
Besser sind wohl Nicos TokenTools ->
http://www.michael-puff.de/Programmierung/Delphi/Importe/Nico/
BenBE - Mo 11.10.10 23:43
Und ohne jetzt mir deinen Source angeguckt zu haben: Du wirst sicherlich so nahezu ALLE gängigen Sicherheitsprüfungen (Integrität, Authentizitätscheck, Authoritätscheck) NICHT umgesetzt haben. Bevor ich mich also jetzt wiederhole, schau einfach mal hier im Forum nach dem, was ich bereits zu anderen Updatern geschrieben hab. Und wenn Du das nicht umsetzen kannst, solltest Du einen verwenden, der das bereits alles hat.
chickenfigt1989 - Di 12.10.10 13:00
Dann schau dir doch einfach mal meine Update Komponente an.
Ich bräuchte auch nur den Befehl um das Programm zu schließen das war glaub ich irgendwas mit Application.Terminate oder so und dann ein Befehl der die heruntergeladene Version startet. Und wo soll ich das dann hinschreiben?
Mfg
Flamefire - Di 12.10.10 13:22
Dann lies mal was BenBE geschrieben hat... Deine Komponente hat nichts davon.
chickenfigt1989 - Di 12.10.10 13:24
Das weiß er ja nicht da er sich den Sourcecode nicht angeschaut hat.
Dude566 - Di 12.10.10 13:50
Muss ich da etwa eine dll für einbinden, denn mein Turbo Delphi kennt diese Methode nicht. Ich dachte zuerst ich müsse WinAPI unter "uses" einfügen, hat aber auch nichts gebracht.
jaenicke - Di 12.10.10 15:17
Die musst du fix wie in MSDN zu sehen deklarieren. (Du findest das auch in meinem Registryeditor.)
ALF - Di 12.10.10 15:28
chickenfigt1989 hat folgendes geschrieben : |
Sorry hab vergessen zu erwähnen das es eine selbst geschriebene Komponente ist.
Hab die komponente mal als Anhang dazugepackt
mfg |
chickenfigt1989 hat folgendes geschrieben : |
Dann schau dir doch einfach mal meine Update Komponente an.
Ich bräuchte auch nur den Befehl um das Programm zu schließen das war glaub ich irgendwas mit Application.Terminate oder so und dann ein Befehl der die heruntergeladene Version startet. Und wo soll ich das dann hinschreiben?
Mfg |
ab hier würde ich sagen, das Du nicht den Updatergeschrieben hast!!!! sonst wüsstest Du wie wo und was!
Gruss ALf
Dude566 - Di 12.10.10 15:45
jaenicke hat folgendes geschrieben : |
Die musst du fix wie in MSDN zu sehen deklarieren. (Du findest das auch in meinem Registryeditor.) |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TmainForm.btnCheckUserForAdminClick(Sender: TObject); type TIsUserAnAdminFunc = function (): BOOL; stdcall; var Shell32DLL: THandle; IsUserAnAdminFunc: TIsUserAnAdminFunc; begin Shell32DLL := LoadLibrary('shell32.dll'); try if Shell32DLL <> 0 then begin @IsUserAnAdminFunc := GetProcAddress(Shell32DLL, 'IsUserAnAdmin'); if Assigned(@IsUserAnAdminFunc) then if IsUserAnAdminFunc then ShowMessage('Sie haben Adminrechte.'); end; finally FreeLibrary(Shell32DLL); end; end; |
Das habe ich jetzt mal von deinem Sourcecode abgewandelt und es scheint zu funktionieren, ich bekomme die ShowMessage.
Habe leider kein eingeschränktes Nutzerkonto zur Hand um mich vom Gegenteil zu überzeugen.
Edit: Code korrigiert und erfolgreich getestet, hat man Adminrechte erscheint eine Nachricht, andernfalls keine.
elundril - Di 12.10.10 20:05
chickenfigt1989 hat folgendes geschrieben : |
Dann schau dir doch einfach mal meine Update Komponente an.
Ich bräuchte auch nur den Befehl um das Programm zu schließen das war glaub ich irgendwas mit Application.Terminate oder so und dann ein Befehl der die heruntergeladene Version startet. Und wo soll ich das dann hinschreiben?
Mfg |
Application.Terminate ist böse, böse, böse, böse (Afaik)! Zum beenden kann man einfach die Close-Methode im Hauptformular aufrufen. Dann kannst du davor im OnCloseQuery deinen Updater mit Shellexecute starten (wenn der Updater ein eigenes Programm ist). Ist er kein eigenes Programm, wirds etwas schwieriger weil du ja die alte EXE ersetzen musst, was nicht geht wenn sie noch läuft.
lg elundril
chickenfigt1989 - Di 12.10.10 20:15
habs hinbekommen
jaenicke - Di 12.10.10 20:22
elundril hat folgendes geschrieben : |
Application.Terminate ist böse, böse, böse, böse (Afaik)! Zum beenden kann man einfach die Close-Methode im Hauptformular aufrufen. |
In diesem Fall hast du da was verwechselt. ;-)
Application.Terminate wird auch durch das Schließen des Hauptformulars aufgerufen (oder wenn WM_QUIT empfangen wird), deshalb endet dann auch das Programm. Es wird aber ordentlich beendet.
Böse sind Befehle wie Halt. ;-)
// EDIT:
Nach kurzem Chat mit Michael und einem kurzen Test noch als Ergänzung:
Application.Terminate überspringt OnClose und OncloseQuery. Die Anwendung wird aber sauber beendet, d.h. OnDestroy wird ausgeführt.
Delete - Di 12.10.10 21:32
jaenicke hat folgendes geschrieben : |
Nach kurzem Chat mit Michael und einem kurzen Test noch als Ergänzung:
Application.Terminate überspringt OnClose und OncloseQuery. Die Anwendung wird aber sauber beendet, d.h. OnDestroy wird ausgeführt. |
Das war aber nicht ich, aber ich hätte dir das selbe gesagt. ;)
elundril - Di 12.10.10 21:35
*Aufzeig* Jap, ich war das bitte. Der Ersatz-Michael. ;)
lg elundril
Delete - Di 12.10.10 21:40
Ach du heißt auch so? Dann mache mir keine Schande. ;)
jaenicke - Mi 13.10.10 04:41
Steht doch sogar fett gedruckt unter seinen Beiträgen. :mrgreen:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!