Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Shutdown Programm (https://www.delphipraxis.net/135392-shutdown-programm.html)

paperboy 10. Jun 2009 07:11


Shutdown Programm
 
hallo zusammen,

ich bin ein delphi programmierer in den kinderschuhen und hab nach ein paar knobelstunden nun mit mein erstes programm fertig.
zumindest dachte ich das. denn in der IDE läuft das programm einwandfrei genau so wie ich es mir vorgestellt habe.
doch leider ist nach dem compilieren der exe der wurm drin und ich hab wirklich keine ahnung woran das liegen kann.
mein programm startet eine prozedur als thread. diese soll den pc herunterfahren wenn eine vorher definierte zeit mit der aktuellen
systemzeit übereinstimmt.
hier mal der code der ausserhalb der ide probleme bereitet:

Delphi-Quellcode:
procedure ThreadShutDown.Execute;
var
SDPfad : String;
SystemPfad : Array[0..MAX_PATH] of Char;
begin
  while istZeit = False do
  begin
    if terminated then exit;
    if SDZeit = Time then istZeit := True;
  end;
GetSystemDirectory(SystemPfad, sizeof(SystemPfad));
SDPfad := SystemPfad + '\Shutdown.exe';
ShellExecute(Application.Handle,'open',PChar(SDPfad),PChar('-s -t 1'),PChar(ExtractFilePath(SDPfad)),SC_DEFAULT);
end;
wie gesagt das klappt hervorragend solange ich das programm von delphi aus starte. als separate exe streikt es.
ich habe nach der while schleife mal eine messagebox eingbaut und siehe da sie wird nicht angezeigt.. die schleife wird jedoch ausgeführt
(ebenfalls mit MessageBox getestet) nur scheint ausserhalb der IDE die variable "istZeit" nie auf true gesetzt zu werden?!

ich hoffe jemand weis hier rat denn es wurmt mich doch ganz schön das mein erster versuch daran scheiter das das programm ausserhalb von delphi
nicht rennen will :(
ich benutze übrigens Vista 32-bit und delphi 2009.

lg paperboy

jaenicke 10. Jun 2009 07:18

Re: Shutdown Programm
 
Ein exakter Vergleich kann ja auch kaum klappen, weil du mehr als auf die Nanosekunde genau zu dem Zeitpunkt testen müsstest, den du suchst... das kann nicht klappen.
Schau doch einfach, ob die Zeit bereits vorbei ist. Zudem solltest du ein Sleep einbauen, das jeweils einige Sekunden wartet, damit weniger Leistung verbraucht wird.

Dann zu deiner Schleife, wie wäre es eher so...
Delphi-Quellcode:
  while (SDZeit > Time) and not Terminated do
  Sleep(5000);
if Terminated then
  Exit;

Uwe Raabe 10. Jun 2009 07:29

Re: Shutdown Programm
 
Ist allerdings verwunderlich, daß es in der IDE offenbar funktioniert...

paperboy 10. Jun 2009 07:43

Re: Shutdown Programm
 
vielen dank jaenicke...
das ganze funktioniert jetzt. und ist dazu noch sehr viel eleganter als mein boolean-spiel :)
hab mich irgendwie an der tatsache aufgehangen das es ja in der ide klappte.
aber wie uwe raabe schon sagte: verwunderlich das es in der ide funktioniert.
jetzt wo mir der fehler richitg bewusst geworden ist frage ich mich schon wieso er nur
ausserhalb delphis auftrat!

vllt weis ja jemand mehr.. wenn nicht auch nicht so wild.. der fehler ist gefunden
und meine laune damit wieder gehoben :balloon:
schön das ich gleich ein forum gefunden hab in dem hilfsbereite leute aktiv sind...
das motiviert doch ungemein wenn man weis das man sich irgendwo kompetente hilfe holen kann

in diesem sinne nochmal vielen dank


lg paperboy

RWarnecke 10. Jun 2009 08:16

Re: Shutdown Programm
 
Wenn Du es noch eleganter lösen möchtest ohne das Shellexecute, dann solltest Du Dir die beiden Links anschauen :

Link 1
Link 2

paperboy 10. Jun 2009 08:39

Re: Shutdown Programm
 
hallo RWarnecke..

habs mir gleich angesehen... aber könntest du mir vllt erklären warum das die bessere löung ist?!
bin noch sehr unerfahren was programmieren angeht und hab keine ahnung welche nachteile sich aus
meiner variante ergeben könnten bwz welche vorteile die andere hat :wink:

lg paperboy

jaenicke 10. Jun 2009 08:43

Re: Shutdown Programm
 
Naja, damit brauchst du kein externes Tool. Das muss ja nicht vorhanden sein und muss auch nicht in allen Windowsversionen die selben Parameter erwarten, zudem ruft es selbst ja nur die Funktionen auf, die du auch gleich selbst verwenden kannst.

Außerdem kannst du es mit den direkten Funktionen einfacher steuern, weil du direkt die gewünschten Werte an die Funktionen übergeben kannst.

Luckie 10. Jun 2009 08:51

Re: Shutdown Programm
 
Ausserdem braucht man für die Shutdown.exe Administratorrechte.

paperboy 10. Jun 2009 10:47

Re: Shutdown Programm
 
danke für die hinweise...

das ist gut zu wissen mit den admin rechten da ich das prog auch an einer maschine nutzen will an der ich keine admin-rechte hab.
und dann muss ich natürlich auch auf kompatibilität achten (wobei der zweite rechner eine xp maschine ist unter der ShutDown.exe wohl keine
probs machen dürfte)
hab nun aber nichtsdestotrotz die InitiateSystemShutdown Funktion eingebaut :) denke sogar das mit den Privilegien verstanden zu haben obwohl das alles
neuland ist.

lg paperboy

mkinzler 10. Jun 2009 10:49

Re: Shutdown Programm
 
Stell dir mal vor, das Program würde keine admin-Privilegien benötigen und jeder könnte jeden beliebigen Rechner remote Herunterfahren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz