1

ASP.NET アプリが実行されているサーバーをシャットダウンまたは再起動できるようにしたいと考えています。次のコードは、デバッグ モードでうまく機能します。

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "shutdown";
startInfo.Arguments = "/r /f /t 0";
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();

このコードも試してみましたが、次のエラーが表示されます。「ユーザーとしてプロセスを開始するには、プロセス オブジェクトの UseShellExecute プロパティを false に設定する必要があります」

var info = new ProcessStartInfo("shutdown.exe", "/r /t 0");
        info.UserName = "administrator";
        //A not-so-secure use of SecureString
        var secureString = new SecureString();
        var password = "password";
        foreach (var letter in password)
        {
            secureString.AppendChar(letter);
        }
        info.Password = secureString;
        var restart = new Process();
        restart.StartInfo = info;
        restart.Start();

コードに次を追加します。

info.UseShellExecute = false;

次に、「ユーザーとしてプロセスを開始するには、プロセス オブジェクトの UseShellExecute プロパティを false に設定する必要があります」というエラーは消えますが、コードは最初のコード ブロックのように実行されます。

コードをデバッグ モードで実行するか、コマンドを cmd で実行すると、サーバーが再起動します。ただし、サーバー上でアプリをライブで実行すると、再起動しません。サーバーが再起動されるか、または再起動されないというメッセージが表示されたり、エラーが表示されたりすることはありません。私が間違っていることを教えてください。

更新:を追加しましたがtry-catch、アプリが例外をスローすることはありません。しかし、イベント ログを調べたところ、shutdown.exe のアプリケーション エラー イベント 1000 が見つかりました。

4

1 に答える 1