Autor |
Beitrag |
chickenfigt1989
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: Mo 11.10.10 20:46
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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 11.10.10 20:50
Setz einfach das Feld "CloseOnUpdate" auf True.
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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Für diesen Beitrag haben gedankt: BenBE
|
|
chickenfigt1989 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: 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
Zuletzt bearbeitet von chickenfigt1989 am Di 12.10.10 16:02, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 11.10.10 21:08
Wie sowas funktioniert kannst du bei meiner Update Komponente schauen. Du kannst z.B. dein eigenes Programm mit entsprechenden Parametern starten, damit das das Update durchführt.
Was mir auf den ersten Blick erst einmal im Quelltext auffällt: Dein Admin-Check dürfte so nicht immer funktionieren. Hast du den einmal unter Vista / 7 ausprobiert?
Es gibt da ab XP eine viel viel einfachere Möglichkeit schon im System. Die Funktion IsUserAnAdmin nämlich...
msdn.microsoft.com/e...bb776463(VS.85).aspx
Die funktioniert auch mit UAC usw. korrekt.
|
|
chickenfigt1989 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: 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
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 -> www.michael-puff.de/...Delphi/Importe/Nico/
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Zuletzt bearbeitet von BenBE am Di 12.10.10 16:10, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: Flamefire
|
|
chickenfigt1989 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: 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
      
Beiträge: 1207
Erhaltene Danke: 31
Win 10
Delphi 2009 Pro, C++ (Visual Studio)
|
Verfasst: Di 12.10.10 13:22
Dann lies mal was BenBE geschrieben hat... Deine Komponente hat nichts davon.
|
|
chickenfigt1989 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: Di 12.10.10 13:24
Das weiß er ja nicht da er sich den Sourcecode nicht angeschaut hat.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: 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.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 12.10.10 15:17
Die musst du fix wie in MSDN zu sehen deklarieren. (Du findest das auch in meinem Registryeditor.)
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 12.10.10 15:28
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: 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.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
chickenfigt1989 
      
Beiträge: 444
Erhaltene Danke: 2
|
Verfasst: Di 12.10.10 20:15
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 12.10.10 21:32
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 12.10.10 21:35
*Aufzeig* Jap, ich war das bitte. Der Ersatz-Michael.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|