C#使用Shutdown.exe只关机

时间:2012-06-19 15:54:12

标签: c# shutdown

我在我的应用程序中使用Shutdown.exe,因为它提供了一些很好的功能,例如它可以延迟关闭并添加注释,为什么需要关闭。

应用规格可以关机,重启,注销,休眠,混合关机,添加注释,延迟关机,并中止计划关机。

应用程序很好,花花公子我已经制作了一个安装文件。我现在尝试在本地安装并使用它。但是当我尝试点击hybernate时,它只是关闭...我点击重启,它关闭,与其他人一样。

我很确定我正在使用正确的参数组合

这是我使用的参数

void PowerButtonsClick(object sender, RoutedEventArgs e)
{
    string p = string.Empty;

    if (sender == btnShutdown)
    {
        p += "-s";
    }
    else if (sender == btnRestart)
    {
        p += "-r";
    }
    else if (sender == btnSignoff)
    {
        p += "-l";
    }
    else if (sender == btnHibernate)
    {
        p += "-h";
    }
    else if (sender == btnHybridShutdown)
    {
        p += "-hybrid -s";
    }
    else if (sender == btnAbortShutdown)
    {
        p += "-a";
    }

    if (sender != btnAbortShutdown)
    {
        if (sender != btnSignoff || sender != btnHibernate)
        {
            if (isForced) { p += " -f"; }

            double seconds = TimeSpan.FromTicks(timePicker.Value.Value.Subtract(DateTime.Now).Ticks).TotalSeconds;

            p += " -t " + Convert.ToInt32(seconds);

            if (hasComment)
            {
                p += string.Format(" -c \"{0}\"", borderComment_txComment.Text);
            }
        }
    }

    System.Diagnostics.Debug.WriteLine("param: " + p);

    System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
    {
        Arguments = p,
        FileName = "shutdown.exe"
    });
}

这是我3天前创建的应用程序。它适用于Windows 8,现在,由于此问题,我关闭了下载链接 http://wall.jaysonragasa.net/wall/post/2012/06/17/Windows-8-System-Power-Shortcuts.aspx

老实说,从IDE运行时一切运行良好..但安装时......我遇到了问题。我甚至尝试使用ILSpy反汇编已部署的应用程序,它看起来没问题,也没有错......

- 更新 - 只是为了更新我的代码

if (sender != btnSignoff || sender != btnHibernate) { ~~ }

一定是

if (sender != btnSignoff && sender != btnHibernate) { ~~ }

您请求时的日志结果

param: -s -f -t 0
param: -l
param: -r -f -t 0
param: -h
param: -a
param: -hybrid -s -f -t 0
param: -s -f -t 0 -c "my comment"
param: -s -f -t 5 -c "my comment"
param: -s -f -t 12118 -c "my comment"
param: -s -t 12110 -c "my comment"

- 更新 -

我决定使用API​​调用但是我放弃了Abort功能,这非常重要。如果您可以分享如何中止计划关机,即使使用WMI或API,请分享。

关心所有

1 个答案:

答案 0 :(得分:2)

我之前使用过它,它可能适合你:

    private void ShutdownComputer(bool restart)
    {
        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"] = restart ? "2" : "1";
        mboShutdownParams["Reserved"] = "0";
        foreach (ManagementObject manObj in mcWin32.GetInstances())
        {
            mboShutdown = manObj.InvokeMethod("Win32Shutdown", mboShutdownParams, null);
        }
    }