C# 关闭或重新启动本地计算机打开按钮

C# 关闭或重新启动本地计算机打开按钮,c#,C#,我在谷歌上搜索了一段时间,似乎总是回到同样的解决方案,但似乎不起作用 private void btnRestart_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("Shutdown.exe", "/r /f /t 00"); } private void btnShutdown_Click(object sender, EventArgs e) { System.Diagnostics

我在谷歌上搜索了一段时间,似乎总是回到同样的解决方案,但似乎不起作用

private void btnRestart_Click(object sender, EventArgs e)
{
    System.Diagnostics.Process.Start("Shutdown.exe", "/r /f /t 00");
}

private void btnShutdown_Click(object sender, EventArgs e)
{
    System.Diagnostics.Process.Start("Shutdown.exe", "/s /f /t 00");
}

CMD出现一小秒,然后关闭,不做任何操作。我错过什么了吗

将这些名称空间添加到代码中

    using System.Diagnostics;
    using System.Runtime.InteropServices;
甚至这也取决于你被赋予了什么特权。
我希望这将对您有所帮助。

根据
shutdown/?
,您使用的不是斜杠(/),而是破折号(-)


或者,尝试使用params运行
cmd.exe
/c shutdown.exe/r/f/t 00

尝试使用

这个答案是我从中得到的。它对我有用。请确保添加对
System.Management

 using System.Management;

    void Shutdown()
    {
        ManagementBaseObject mboShutdown = null;
        ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");
        mcWin32.Get();

        // You can't shutdown without security privileges
        mcWin32.Scope.Options.EnablePrivileges = true;
        ManagementBaseObject mboShutdownParams =
                 mcWin32.GetMethodParameters("Win32Shutdown");

        // Flag 1 means we want to shut down the system. Use "2" to reboot.
        mboShutdownParams["Flags"] = "1";
        mboShutdownParams["Reserved"] = "0";
        foreach (ManagementObject manObj in mcWin32.GetInstances())
        {
            mboShutdown = manObj.InvokeMethod("Win32Shutdown", 
                                           mboShutdownParams, null);
        }
    }
这有点干净

使用System.Runtime.InteropServices;
[DllImport(“user32.dll”,SetLastError=true)]
静态外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部-外部;
性别(1,0)//这将导致系统关闭。

性别(2,0)//这将导致系统重新启动。
这取决于应用程序拥有的权限…我不确定,但是
Shutdown.exe
可能需要
Shutdown.exe
。或者,这只适用于Linux。只是一个想法。目前它正在域管理员帐户下进行测试。您已经在cmd.exe中尝试了该命令,并且它可以工作?您是否尝试在参数前加上“cmd/k”,即“cmd/k shutdown.exe…”?这至少应该使命令窗口保持打开状态,以便您可以查看shutdown.exe是否显示错误消息。@FrK引用该链接
 using System.Management;

    void Shutdown()
    {
        ManagementBaseObject mboShutdown = null;
        ManagementClass mcWin32 = new ManagementClass("Win32_OperatingSystem");
        mcWin32.Get();

        // You can't shutdown without security privileges
        mcWin32.Scope.Options.EnablePrivileges = true;
        ManagementBaseObject mboShutdownParams =
                 mcWin32.GetMethodParameters("Win32Shutdown");

        // Flag 1 means we want to shut down the system. Use "2" to reboot.
        mboShutdownParams["Flags"] = "1";
        mboShutdownParams["Reserved"] = "0";
        foreach (ManagementObject manObj in mcWin32.GetInstances())
        {
            mboShutdown = manObj.InvokeMethod("Win32Shutdown", 
                                           mboShutdownParams, null);
        }
    }