|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 157
|
[Visual C++ 2008] Problemi con system()
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! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Credo proprio che quel comando su Windows non funzioni
Codice:
::ExitWindowsEx(EWX_REBOOT,0); |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 157
|
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!! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
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). |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2009
Messaggi: 157
|
Ok, ora ho capito tutto.
Pubblico la porzione di codice che permette all'applicazione di spegnere il PC, sperando che sia utile a qualcuno: Codice:
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);
Grazie a tutti! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:45.



















