| Autor |
Beitrag |
Ak-Alex
Gast
Erhaltene Danke: 1
|
Verfasst: Mo 04.08.03 16:59
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:
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!
|
|
Ak-Alex
Gast
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 100
Win 2000/2000 Server/XP
D6 Prof.
|
Verfasst: Di 05.08.03 10:46
Vielleicht mit ExitWindowsEx(EWX_FORCE, 0);
_________________ Wer Rechtschreibfehler findet, kann Sie behalten
|
|
recall
      
Beiträge: 449
|
Verfasst: 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 
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 449
|
Verfasst: 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
      
Beiträge: 449
|
Verfasst: Mi 13.08.03 02:05
Hmmm... achso die Netzwerkverbindungen habe durch "Freigabe entziehen" der freigegebenen Ordner gelöst (weil ja EWX_FOCRE fehlte).
|
|
Ak-Alex
Gast
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 449
|
Verfasst: 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  .
|
|
Ak-Alex
Gast
Erhaltene Danke: 1
|
Verfasst: 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!
|
|
Ak-Alex
Gast
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 416
Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
|
Verfasst: So 17.08.03 20:54
schon die funktion
InitiateSystemShutdown
ausprobiert? probier mal, ob es damit funktioniert..
|
|
Ak-Alex
Gast
Erhaltene Danke: 1
|
Verfasst: Mi 20.08.03 16:53
jo, funktioniert auch nicht
|
|
rochus
      
Beiträge: 416
Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
|
Verfasst: 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ß
|
|
Ak-Alex
Gast
Erhaltene Danke: 1
|
Verfasst: Fr 29.08.03 20:39
|
|
rochus
      
Beiträge: 416
Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
|
Verfasst: 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.
|
|
BoMbY
      
Beiträge: 17
|
Verfasst: Mo 01.09.03 11:59
Probier mal:
ExitWindowsEx(EWX_REBOOT or EWX_FORCE, SHTDN_REASON_MAJOR_OTHER or SHTDN_REASON_MINOR_OTHER);
Das Problem mit EWX_FORCE ist, dass es die Anwendungen einfach killt und die somit nichts mehr speichern können, etc. Also läßt Du es vieleicht einfach weg oder benutzt WindowsXP.
Zu den Flags siehe auch: msdn.microsoft.com/l...se/exitwindowsex.asp
m.f.g.
BoMbY
|
|