Entwickler-Ecke
Windows API - Reboot Problem....
Anonymous - Mo 04.08.03 16:59
Titel: Reboot Problem....
Ich habe einen Server auf einem Netzwerkrechner laufen...
Jetzt möchte ich von einem Clientrechner aus den Serverrechner neustarten...
Dazu nutze ich im Serverprogramm folgende funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| function MyExitWindows(RebootParam: Longword): Boolean; var TTokenHd: THandle; TTokenPvg: TTokenPrivileges; cbtpPrevious: DWORD; rTTokenPvg: TTokenPrivileges; pcbtpPreviousRequired: DWORD; tpResult: Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); end; end; Result := ExitWindowsEx(RebootParam, 0); end; |
auf dem Serverrechner läuft winows98, doch wenn ich die funktion ausführen lasse kommt er nur bis zum windows98 wird heruntergefahren bildschirm...
was kann ich ändern...
Alex
P.S. Wenn ich Windows über ALT + F4 --> Neustarten , neustarte klappts!
Anonymous - Mo 04.08.03 18:18
ich denke mal das liegt daran das windows gesesmal vorm beenden fragen möchte ob man wirklich die netzwerkverbindung zu anderen usern trennen möchte...
aber wie kann ich das umgehen?
lambruco - Di 05.08.03 10:46
Vielleicht mit ExitWindowsEx(EWX_FORCE, 0);
recall - Mi 13.08.03 00:31
| Zitat: |
Vielleicht mit ExitWindowsEx(EWX_FORCE, 0);
|
Aber nicht immer machen, denn damit zerschiesst du dein Windoof nach einiger Zeit :(
Delete - Mi 13.08.03 01:48
| recall hat folgendes geschrieben: |
Aber nicht immer machen, denn damit zerschiesst du dein Windoof nach einiger Zeit :( |
Erklärung bitte.
recall - Mi 13.08.03 02:03
Leider kann ichs nicht erklären, aber WinNT und Win98 SE habe ich per Proggi immer mit EWX_FORCE runtergefahren (obwohl eigentlich kein anderes Programm lief, nur halt für den Fall...).
Nach ca. 2-4 Wochen wollte das Betriebssystem nicht mehr starten. Es hat dann etliche fehlerhafte Dateien angezeigt, usw...
=> Neuinstallation :(
Das war KEIN Einzelfall, war bei 3 verschiedenen Servern und 25 Clients so, und wie gesagt unter NT und 98 SE. Dann hab' ich nichts am Programm geändert nur EWX_Force weggelassen => Es lief !
Das Problem war, dass die Netzwerkverbindungen "gekappt" wurden und da einige Dateien zerschossen waren (die gehörten [laut eines FAQs, dass ich damals hatte] zum Netzwerk).
Tja... Viele Grüsse.
recall - Mi 13.08.03 02:05
Hmmm... achso die Netzwerkverbindungen habe durch "Freigabe entziehen" der freigegebenen Ordner gelöst (weil ja EWX_FOCRE fehlte).
Anonymous - So 17.08.03 18:55
Wenn ich das so mache bleibt der Rechner mit dem Bildschirm "Windows wird heruntergefahren" hängen!!!
Alex
P.S. Ich würde das ja auch alles lassen, doch Windows98 fängt nach einem Tag daueronline an zu lahmen!!!
recall - So 17.08.03 19:12
| Ak-Alex hat folgendes geschrieben: |
| Wenn ich das so mache bleibt der Rechner mit dem Bildschirm "Windows wird heruntergefahren" hängen!!! |
Stimmt. Kann ich mich dran erinnern, das war bei mir auch so :( .
Kannst du nicht Win XP/NT draufpacken (läuft auch nach Wochen noch stabil und schnell) ?
Aber auch mit XP/NT gehts nicht ewig, da musst du den Arbeitsspeicher defragmentieren. Vielleicht weiss hier einer wie das geht ?
Ich hatte mir das mal rausgesucht, finde es aber nicht mehr :( .
Vielleicht googeln :?:
ABER ICH HAB' NOCH EINE IDEE:
HOLZHAMMERMETHODE:
Steuer deinen Cursor (mit SetCursorPos()) auf den "Start"-Button, dann Click simulieren, dann auf "Herunterfahren", Click simulieren, dann... usw.
So kannst du nix falsch machen ;) .
Viele Grüsse.
P.S.: Wehe, wehe, es beschwert sich jemand über meine Smilie-Flut :D :D :D .
Anonymous - So 17.08.03 19:27
Für Andere Betriebssysteme reicht leider der festplattenspeicher auf dem druckerserver nicht aus.....
es muss doch noch ne andere möglichkeit geben....kann man diese meldung ob man alle im netzwerk eingeloggten benutzer rausschmeissen will nicht unterbinden oder ausschalten?
Hab auch shchon versucht einen ButtonClick zu simulieren per FindWindow u.s.w. aber sobald der rechner anfängt neuzustarten werden alle anderen programme deaktiviert!
Anonymous - So 17.08.03 19:28
vielleicht gibt es ja ne möglichkeit das netzwerk zu deaktivieren oder alle eingeloggten benutzer auzuloggen....bei xp und me gehts ja auch
rochus - So 17.08.03 20:54
schon die funktion
InitiateSystemShutdown
ausprobiert? probier mal, ob es damit funktioniert..
Anonymous - Mi 20.08.03 16:53
jo, funktioniert auch nicht
rochus - Mi 20.08.03 17:19
schon über WMI probiert?
dazu brauchst du dann glaub ich den benutzernamen des rechners + passwort.. aber das sollte ja kein problem sein :) du brauchst aber noch die Unit
WBemScripting_TLB.Pas, die kriegst du so:
Delphi starten
C:\WINNT\system32\wbem\wbemdisp.tlb laden
registrieren..
schon hast du sie :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| var Locator : ISWbemLocator; Services : ISWbemServices; ObjectSet: ISWBemObjectSet; SObject : ISWBemObject; Enum : IEnumVariant; tempObj : OleVariant; Value : Cardinal; strTemp : string; begin Locator := CoSWbemLocator.Create; Services := Locator.ConnectServer('ServerRechner','root\cimv2','','','','',0,nil); Services.Security_.Privileges.Add(wbemPrivilegeShutdown,true); ObjectSet := Services.ExecQuery('SELECT * FROM Win32_OperatingSystem WHERE Primary=True','WQL', wbemFlagReturnImmediately,nil); Enum := (ObjectSet._NewEnum) as IEnumVariant; while (Enum.Next(1,tempObj,Value) = S_OK) do begin SObject := IUnknown(tempObj) as SWBemObject; SObject.ExecMethod_('Shutdown', nil, 0, nil); end; end; |
gruß
Anonymous - Fr 29.08.03 20:39
klappt leider auch nicht
rochus - Sa 30.08.03 11:41
hmm, bist du in einer domäne oder in einer arbeitsgruppe? ich hab die erfahrung gemacht, dass bestimmte funktionen nur in der Domäne funktionieren.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!