Zum Inhalt springen

VB.Net Lokalen PC herunterfahren


Empfohlene Beiträge

Geschrieben

Gibt es da einen einfachen Befehl um den Lokalen PC herunterzufahren? Der Befehl sollte von 2000, XP und 2003 unterstützt werden und Nicht dazu führen, das dann "Sie können den PC jetzt ausschalten" auf dem Bildschirm stehen bleibt.

Geschrieben
    Private Declare Function ExitWindows Lib "User32" Alias "ExitWindowsEx" _

    (ByVal dwOptions As Integer, _

     ByVal dwReserved As Integer) As Integer


    Private Sub quit()

        ExitWindows(1, &HFFFFS)

    End Sub

	

Geschrieben
    Private Sub quit()


        On Error Resume Next


        Dim objWMI As Object

        Dim colItems As Object

        Dim objItem As Object


        objWMI = GetObject( _

              "WinMgmts:{impersonationLevel=impersonate, " & _

              "(Shutdown)}!/root/cimv2")

        colItems = objWMI.ExecQuery( _

              "SELECT * FROM Win32_OperatingSystem")


        For Each objItem In colItems

            objItem.Shutdown()

        Next objItem


    End Sub

Geschrieben
Und was ist die Fehlermeldung?

keine! es passiert einfach nix!

wobei der benutzerwechsel mit win2000 klappt!

der zweite code funktioniert mit win2000

Geschrieben

Hmm, Also mit der WMI geschichte hab ich zwar den PC unter 2000 runtergefahren, Jedoch blieb er dann beim acpi-Poweroff hängen. Ich hab jetz ein kleines workarround genommen: ein aufruf der psshutdown.exe aus den sysinternals. Klappt wunderbar. Trotzdem Danke.

Geschrieben
Hmm, Also mit der WMI geschichte hab ich zwar den PC unter 2000 runtergefahren, Jedoch blieb er dann beim acpi-Poweroff hängen. Ich hab jetz ein kleines workarround genommen: ein aufruf der psshutdown.exe aus den sysinternals. Klappt wunderbar. Trotzdem Danke.

wenn du dich wenigstens ein bißchen eingearbeitet hättest, hättest du herausgefunden, dass man statt shutdown --> Win32Shutdown(12) verwenden kann; und dann klappts auch!

Geschrieben
GetLastError liefert keine Fehlermeldung?

ich meinte, wenn man das ausführt:

    Private Declare Function ExitWindows Lib "User32" Alias "ExitWindowsEx" _

    (ByVal dwOptions As Integer, _

     ByVal dwReserved As Integer) As Integer


    Private Sub quit()

        ExitWindows(1, &HFFFFS)

    End Sub

	

macht windows schlichtweg nix;

was andres hab ich gar ned probiert...

Geschrieben

was andres hab ich gar ned probiert...

Ich habe gefragt, ob die API-Funktion ExitWindowsEx einen Fehler signalisiert und was GetLastError, gleich im Anschluss darauf aufgerufen, zurückliefert. "Es geht nicht" ist keine Fehlerbeschreibung, auf die man sinnvoll antworten kann.

Zu dem Code:

Der erste Parameter sollte 0x8 sein, im Fall von 0x1 wird das System nicht ausgeschaltet. Ausserdem braucht Dein Prozess laut Dokumentation im PSDK das SE_SHUTDOWN_NAME Privileg. Dieses musst Du Dir über AdjustTokenPrivileges beschaffen.

Als zweiten Parameter ist eine Auswahl zwischen 0x4 oder 0x10 (und 0, wenn keine weiteren Angaben gemacht werden sollen) dokumentiert, je nach verwendetet OS. Bitte lies die Dokumentation für genauere Angaben selbst nach.

Geschrieben
Ich habe gefragt, ob die API-Funktion ExitWindowsEx einen Fehler signalisiert und was GetLastError, gleich im Anschluss darauf aufgerufen, zurückliefert. "Es geht nicht" ist keine Fehlerbeschreibung, auf die man sinnvoll antworten kann.

Zu dem Code:

Der erste Parameter sollte 0x8 sein, im Fall von 0x1 wird das System nicht ausgeschaltet. Ausserdem braucht Dein Prozess laut Dokumentation im PSDK das SE_SHUTDOWN_NAME Privileg. Dieses musst Du Dir über AdjustTokenPrivileges beschaffen.

Als zweiten Parameter ist eine Auswahl zwischen 0x4 oder 0x10 (und 0, wenn keine weiteren Angaben gemacht werden sollen) dokumentiert, je nach verwendetet OS. Bitte lies die Dokumentation für genauere Angaben selbst nach.

ich hab ihm doch schon mitlerweile einen funktionsfähigen code geliefert...

und ich sagte auch, dass ich kein GetLastError gemacht habe...

Geschrieben
ich hab ihm doch schon mitlerweile einen funktionsfähigen code geliefert...

Ich beziehe mich nicht auf das Beispiel unter Verwendung von WMI. Der Aufruf von ExitWindowsEx, so wie Du ihn alleine gepostet hast, reicht nicht.

und ich sagte auch, dass ich kein GetLastError gemacht habe...

Hättest Du es getan, wäre aufgefallen, dass GetLastError nach em Aufruf von ExitWindowsEx den Fehlercode 1314 zurückliefert. Dies, zusammen mit der Dokumentation von ExitWindowsEx, sollte ausreichen, um das Problem anzugehen.

Geschrieben

Hättest Du es getan, wäre aufgefallen, dass GetLastError nach em Aufruf von ExitWindowsEx den Fehlercode 1314 zurückliefert. Dies, zusammen mit der Dokumentation von ExitWindowsEx, sollte ausreichen, um das Problem anzugehen.

welches nicht meines ist....

wenn er sich nicht selbst die mühe macht ist es mir egal!

ich debugge doch nicht auch noch für jemanden, wenn er 90% schon auf dem teller serviert bekommt

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...