Programm geht nur in Visual Studio
-
hallo,
ich starte gerade mit programmieren (für mich selber) und habe ganz einfach ein kleines programm geschrieben welches einfach einen system befehl ausführe soll.
wenn ich es im visual studio unter debug und release ausführe kompiliert es wunderbar, aber wenn ich das programm im release/debug ordner starte macht es nicht was es soll.
void CShutdownDlg::OnBnClickedButton1() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. UpdateData(true); CString cmd; cmd = "shutdown /s /t "; cmd.Insert(cmd.GetLength(),s_time); system(CT2CA(cmd)); }
in visual studio macht er es wunderbar und es passiert auch das was ich möchte.
draußen macht er das cmd fenster auf und irgendwie macht sich das programm selber nochmal auf. aber den system befehl führt er nicht aus.
-
Und warum verwendest Du shutdown machst es nicht selbst ExitWindowsEx?
-
hmm weil ich am lernen bin und die funktion nicht kenne
ich probiers gleich mal und gib bescheid obs geklappt hat.
das komische ist ja, ich hab ne konsolenanwendung erstellt mit der geht es, doch mit mfc nicht... sehr komisch.
-
ich habe das ganze jetzt so geöst
void Cshutdown_2Dlg::OnBnClickedButton1() { UpdateData(true); DWORD sekunden; sekunden = minuten *60; InitiateSystemShutdownEx(0,0,sekunden,0,true,0); } void Cshutdown_2Dlg::OnBnClickedButton2() { AbortSystemShutdown(NULL); }
aber ich würde gerne verstehen, warum mein system befehl nicht geht
-
Weil Dein Programm nicht als Admin läuft. Du aber Dein VS evt. als Admin startest...
-
habs als admin gestartet, macht keinen unterschied
-
EDIT: Bitte löschen falscher Thread
-
hab schon wieder ein problem, das hat jetzt wunderbar funktioniert, hab den pc runterfahren lassen alles ok.
doch jetzt gehts auf einmal nicht mehr, kann mir jemand weiter helfen? er führt die funktion einfach nicht aus
-
ich hab immer noch keine lösung gefunden warum
InitiateSystemShutdownEx(0,0,sekunden,0,true,0);
auf einmal nicht mehr geht, hat jemand ne idee?
-
also es muss irgendwas mit
SE_SHUTDOWN_NAME privilege
zu tun haben. aber ich verstehe nicht richtig was damit gemeint ist. ich muss mir erst irgendwie tokens holen aber ich hab keine ahnung wie das gehen soll
-
Genau. Du musst das Privileg aktivieren...
http://msdn.microsoft.com/en-us/library/windows/desktop/aa376871
-
vielen dank,
habs hinbekommen
ich verstehe aber irgendwie nicht warum es erst mal ging.jetzt hätte ich noch eine kleine frage, gibt es eine funktion die mir sagt ob herunterfahren aktiv ist?
-
Mir ist keine bekannt. Das kannst Du eigentlich niur mitbekommen, wenn Du auf die beiden Messages WM_QUERYENDSESSION und WM_ENDSESSION hörst...
Vielleicht hilft auf das hier:
http://stackoverflow.com/questions/981306/how-to-detect-whether-windows-is-shutting-down-or-restarting
http://stackoverflow.com/questions/4617538/is-there-a-way-in-c-sharp-to-detect-a-windows-shutdown-logoff-and-cancel-that-ac