2012-06-22 3 views
3

Windows 7 컴퓨터를 C# WPF 응용 프로그램에서 재부팅하려고합니다. (나를 위해이 절대적으로 아무것도하지 않습니다ExitWindowsEx windows 7 종료가 작동하지 않습니다.

Windows에서
[DllImport("user32.dll", SetLastError = true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool ExitWindowsEx(ExitWindows uFlags, ShutdownReason dwReason); 

public static void Reboot() { 
    ExitWindowsEx(0x02, 0x0) 
} 

7 기계 :이 범위 내에서 다음 코드를 (내가 열거를 사용하지만, 난 그냥 여기에 상수를 삽입하고있어 코드 단편을 유지하기 위해) 추가했습니다 어쨌든). 0x2 (재부팅)을 0x0 (로그 오프)로 변경하면 코드가 현재 사용자에게 로그 오프되지만 재부팅 코드가 작동하지 않는 것처럼 보입니다.

GetLastError API 호출을 사용해도 많은 이점이 없었습니다. 함수가 성공적으로 완료되었음을 나타냅니다.

지금은 그냥/r/f를 사용하여 shutdown 명령을 호출하여 대처하지만 응용 프로그램에서 Windows API를 직접 호출 할 수 있기를 바랍니다. 그러면 도움이 될 것입니다.

답변

4

오류를 올바르게 검사하지 않습니다. 함수가 false를 반환하는지 확인하는 경우에만 이 아닌 pinvoke GetLastError()가 대신 Marshal.GetLastWin32Error()를 사용하십시오. 가장 좋은 방법은

public static void Reboot() { 
    if (!ExitWindowsEx(0x02, 0x0)) { 
     throw new System.ComponentModel.Win32Exception(); 
    } 
} 

높은 확률로 컴퓨터를 재부팅 할 충분한 권한이 없음을 알 수 있습니다. AdjustTokenPrivileges가 필요하면 MSDN 문서를 확인하십시오.

+0

내가 사무실로 돌아올 때 이것을 보도록하겠습니다. 내 자신의 계정 정보를 사용하여 코드를 실행 중이지만 도메인 관리자입니다. 또한 (동일한 사용자에 대해) 작동하는/r 플래그를 사용하여 외부 shutdown.exe를 호출하는 Reboot() 함수를 다시 작성했습니다. 특권 문제가 저에게 이상하게 보일 것입니다. – Robba

관련 문제