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 呼び出しを使用することにしましたが、非常に重要な中止機能がありません。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 に答える