View Full Version : [Visual C++ 2008] Problemi con system()
Emalele1688
19-10-2009, 21:24
Salve a tutti..
Ho problemi con la funzione system() di stdlib.h. Premetto fin da ora che mi trovo su un sistema Windows XP Professional SP3, ed uso Visual Studio 2008.
Il mio problema è il seguente:
Ho bisogno di riavviare il computer mediante la mia applicazione console scritta in c++, chiamo quindi:
system("shutdown /s /t 0");
compilo il sorgente e quando viene chiamata la system(...) si ferma il programma per un paio di istanti e poi non succede nulla!
Chi mi sa dare una mano??
Vi ringrazio da ora!
tomminno
19-10-2009, 23:16
Credo proprio che quel comando su Windows non funzioni
::ExitWindowsEx(EWX_REBOOT,0);
Questo funziona se il processo ha il SeShutdownPrivilege altrimenti va esplicitamente abilitato.
Emalele1688
20-10-2009, 16:42
Io devo fare un programma(a scopo didattico) che installa dei file sull'Hard Disk, esegue delle modifiche al registro di sistema e riavvia il computer. Questo programma deve funzionare su qualsiasi computer Windows. Mi manca solo la parte che riavvia il computer. Mediante la funzione ExitWindowsEx si può fare?? non capisco il fatto dei permessi.
Help!!
tomminno
20-10-2009, 19:03
Si il reboot su windows di fa tramite ExitWindowsEx.
Il discorso sui permessi indica solo che non è garantito che un software possa riavviare la macchina (generalmente non ci sono problemi).
Emalele1688
23-10-2009, 13:03
Ok, ora ho capito tutto.
Pubblico la porzione di codice che permette all'applicazione di spegnere il PC, sperando che sia utile a qualcuno:
void* hToken;
TOKEN_PRIVILEGES tkp;
//Crea una risorsa per il processo
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
//Abilita lo Shutdown nel sistema
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; //Abilita il privileggio
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//Abilita lo shutdown per questo processo
AdjustTokenPrivileges(hToken, false, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
//Shutdown
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
Se pensate che qualcosa non sia corretto fatemi sapere.
Grazie a tutti!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.