System Shutdown funktioniert nicht?



  • Hi,

    mein kleines fünf zeilen programm soll eigentlich den computer ausschalten.
    funktioniert aber leider nicht. ich hab mich schon bei google umgesehen und
    kann keinen fehler erkennen.

    #include <windows.h>

    int main() {
    InitiateSystemShutdown( NULL, NULL, 0, TRUE, FALSE);
    return(0);
    }

    das programm kann ich ohne fehler compilieren, aber beim ausführen
    passiert nichts? weiß einer vielleicht worans liegt?

    Danke!!!



  • Was gibt InitiateSystemShutdown() denn zurück? Ich vermute mal dein Prozess hat einfach nicht die erforderlichen Rechte...



  • selbst wenn ich das programm als administrator starte passiert nichts.
    kanns vielleicht daran liegen das ich win 2000 sp4 benutze???



  • dot schrieb:

    Was gibt InitiateSystemShutdown() denn zurück?



  • Benutze doch mal explizit "InitiateSystemShutdownA".



  • das hier sollte eigentlich auch klappen:

    #include <windows.h>
    
    int main()
    {
        system("C:\\WINDOWS\\System32\\shutdown.exe -s -f -t 0 ");
        return 0;
    }
    


  • Aus der MSDN:

    The following example enables the SE_SHUTDOWN_NAME privilege and then shuts down the system.

    HANDLE hToken;  
    TOKEN_PRIVILEGES tkp;  
    
    // Get a token for this process. 
    
    if (!OpenProcessToken(GetCurrentProcess(), 
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
        error("OpenProcessToken"); 
    
    // Get the LUID for the shutdown privilege. 
    
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 
            &tkp.Privileges[0].Luid); 
    
    tkp.PrivilegeCount = 1;  // one privilege to set    
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    
    // Get the shutdown privilege for this process. 
    
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
            (PTOKEN_PRIVILEGES)NULL, 0); 
    
    // Cannot test the return value of AdjustTokenPrivileges. 
    
    if (GetLastError() != ERROR_SUCCESS) 
        error("AdjustTokenPrivileges"); 
    
    // Shut down the system and force all applications to close. 
    
    if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) 
        error("ExitWindowsEx");
    

    Ich würde es mal damit versuchen, zuerst das Privileg zu besorgen, und dann Deine Funktion aufzurufen.


Anmelden zum Antworten