Winapi ExitWindowsEx windows 7关闭不起作用

Winapi ExitWindowsEx windows 7关闭不起作用,winapi,windows-7,Winapi,Windows 7,我正试图让Windows 7计算机从C#WPF应用程序重新启动。在这方面,我添加了以下代码(我使用了一个枚举,但为了保持代码简短,我只在这里插入常量): 在Windows7机器上,这绝对不起任何作用(对我来说)。将0x2(重新启动)更改为0x0(注销)会使代码注销当前用户,但重新启动代码似乎不起作用 使用GetLastErrorAPI调用也没什么作用。它只是说明函数已成功完成 目前,我只是通过使用/r/f调用shutdown命令来应对,但我更希望能够直接从我的应用程序调用Windows API,

我正试图让Windows 7计算机从C#WPF应用程序重新启动。在这方面,我添加了以下代码(我使用了一个枚举,但为了保持代码简短,我只在这里插入常量):

在Windows7机器上,这绝对不起任何作用(对我来说)。将0x2(重新启动)更改为0x0(注销)会使代码注销当前用户,但重新启动代码似乎不起作用

使用GetLastErrorAPI调用也没什么作用。它只是说明函数已成功完成


目前,我只是通过使用/r/f调用shutdown命令来应对,但我更希望能够直接从我的应用程序调用Windows API,因此非常感谢您的帮助。

您没有正确检查错误。仅检查函数是否返回false,不要pinvoke GetLastError(),而是使用Marshal.GetLastWin32Error()。最佳方式:

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

很有可能你会发现你没有足够的权限重新启动机器。如果需要特权,请查看MSDN文章。

我回到办公室后会看一看。我正在我自己的帐户信息下运行代码,这是一个域管理员。此外,我现在重写了Reboot()函数,以使用/r标志调用external shutdown.exe,该标志对同一用户有效。特权问题对我来说似乎很奇怪。
public static void Reboot() {
    if (!ExitWindowsEx(0x02, 0x0)) {
        throw new System.ComponentModel.Win32Exception();
    }
}