[ ajz @ 27.11.2005. 20:30 ] @
Koristim VS2005 C# i trebam da ugasim komp. Kako??? |
[ ajz @ 27.11.2005. 20:30 ] @
[ sstanko78 @ 27.11.2005. 22:41 ] @
Probaj na
Start->Shutdown ili na dugme [ surferxyz @ 28.11.2005. 09:00 ] @
api
[ Deep|Blue @ 28.11.2005. 10:05 ] @
shutdown.exe -s
[Ovu poruku je menjao Deep|Blue dana 28.11.2005. u 11:05 GMT+1] [ mmix @ 28.11.2005. 13:13 ] @
Shutdown.exe je ok resenje, ali zavisi od prisustva tog fajla (pretpostavljam da ga niko ne brise al uvek ima izuzetaka
![]() Pogledaj ovaj link za kod kojim se radi shutdown/restart iz C#-a: About Shutdown Win XP with C# [ Andrej Čvoro @ 28.11.2005. 21:28 ] @
Citat: sstanko78: Probaj na Start->Shutdown ili na dugme Definitivno ![]() [ sstanko78 @ 30.11.2005. 09:15 ] @
Pogledao sam gornji link. To sa c# je prilicno komplikovano,
mi smo api pozive radili u managed c++ to je bilo tamo nesto jednostavnije. Sve funkcije koje pozivaju WinAPI smo imali u jednom dll. [Ovu poruku je menjao sstanko78 dana 30.11.2005. u 10:18 GMT+1] [ ntadic @ 01.12.2005. 11:47 ] @
Ja sam iz VB6 gasio komp pozivom funkcije ExitWindowsEx, bez problema. Ali to je bila, stara, dobra 98.
Na NT (tj. win2000 pa na ovamo...) je pricha drugachija, morash da se petljash sa permition-ima i process-ima... [ mmix @ 02.12.2005. 13:41 ] @
Citat: sstanko78: Pogledao sam gornji link. To sa c# je prilicno komplikovano, mi smo api pozive radili u managed c++ to je bilo tamo nesto jednostavnije. Sve funkcije koje pozivaju WinAPI smo imali u jednom dll. Vecina koda iz tog primera je podesavanje API poziva za PlatforInvoke, isto to u C++-u imas u .h fajlovima, samo sto ti je to neko vec pripremio unapred ![]() Glavna igranka je u ovom kodu: Code: bool ok; TokPriv1Luid tp; IntPtr hproc = GetCurrentProcess(); IntPtr htok = IntPtr.Zero; ok = OpenProcessToken( hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok ); tp.Count = 1; tp.Luid = 0; tp.Attr = SE_PRIVILEGE_ENABLED; ok = LookupPrivilegeValue( null, SE_SHUTDOWN_NAME, ref tp.Luid ); ok = AdjustTokenPrivileges( htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero ); ok = ExitWindowsEx( flg, 0 ); Za Windows NT/XP/2000/2003/Vista postoji SE_SHUTDOWN privilegija. Za razliku od prava (rights), privilegije se ne vezuju za tvoj security token automatski vec moras sam da ih zatrazis ako i kad ti trebaju (to izmedju ostalog omogucava logovanje upotrebe privilegija u EventLog-u). Gornji primer uzima security token trenutne aplikacije (dakle tvoj token) sa namerom da ga promeni (TOKEN_ADJUST_PRIVILEGES); locira sistemsku vrednost za SE_SHUTDOWN_NAME, i na tvoj token veze SE_SHUTDOWN privilegiju kao enabled. Tek onda mozes da pozoves ExitWindowsEx... Veruj mi, ne postoji jednostavniji nacin, alternativa je preko PowerManagment API-a, ali tu ustedis mozda liniju koda a rizikujes da PowerManagment servis bude ugasen i da ti kod prsne. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|