![]() |
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:
wie gesagt das klappt hervorragend solange ich das programm von delphi aus starte. als separate exe streikt es.
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; 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 |
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; |
Re: Shutdown Programm
Ist allerdings verwunderlich, daß es in der IDE offenbar funktioniert...
|
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 |
Re: Shutdown Programm
|
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 |
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. |
Re: Shutdown Programm
Ausserdem braucht man für die Shutdown.exe Administratorrechte.
|
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 |
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 22:41 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