1

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

应用程序规范可以关闭、重新启动、注销、休眠、混合关闭内容、添加评论、延迟关闭以及中止预定的关闭。

该应用程序很好而且很漂亮,我已经制作了一个安装文件。我现在尝试在本地安装并使用它。但是当我尝试点击休眠时,它只是关闭了......我点击了重新启动,它关闭了,和其他人一样。

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

这是我使用的参数

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,请分享。

问候所有人

4

1 回答 1

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);
        }
    }
于 2012-06-19T16:17:53.177 回答