加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有多个参数的Shutdown.exe进程,无法正常工作

发布时间:2020-12-16 01:50:38 所属栏目:百科 来源:网络整理
导读:我想创建一个进程,使用shutdown.exe在给定时间后关闭计算机. 这是我的代码: ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.CreateNoWindow = false;startInfo.UseShellExecute = false;startInfo.WindowStyle = ProcessWindowStyle.Hidde
我想创建一个进程,使用shutdown.exe在给定时间后关闭计算机.

这是我的代码:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "shutdown.exe";
startInfo.Arguments = "–s –f –t " + seconds;
Process.Start(startInfo);

其中seconds是int局部变量,用户决定.

当我运行我的代码时没有任何反应.但是当我手动进入cmd提示符并键入:
shutdown.exe – s -f -t 999
然后Windows将弹出一个弹出窗口并告诉我系统将在16分钟内关闭.

我认为这是因为多个参数的原因是我的方法中止正在进行的系统关闭工作(我从cmd提示符手动创建了systemshutdown).这几乎是相同的,除了在startInfo.Argument:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "shutdown.exe";
startInfo.Arguments = "-a";
Process.Start(startInfo);

解决方法

快速检查shutdown.exe的用法消息表明它希望斜杠(‘/’)后面的选项参数不是破折号(‘ – ‘).

更换线:

startInfo.Arguments = "–s –f –t " + seconds;

附:

startInfo.Arguments = "/s /f /t " + seconds;

使用C#express 2010在我的盒子上产生一个工作结果.

此外,您可以将程序读取的标准错误和标准错误重定向到已启动的进程中,以便您可以了解运行后发生的情况.为此,您可以存储Process对象并等待基础进程退出,以便您可以检查一切是否顺利.

startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardError = true;

        Process p = Process.Start(startInfo);
        string outstring = p.StandardOutput.ReadToEnd();
        string errstring = p.StandardError.ReadToEnd();
        p.WaitForExit();

不幸的是,我无法告诉你为什么命令行版本接受选项上的’破折号’前缀而C#执行版本不接受.但是,希望你所追求的是一个有效的解决方案.

以下代码的完整列表:

int seconds = 100;
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.FileName = "shutdown.exe";
        startInfo.Arguments = "/s /f /t " + seconds;
        startInfo.RedirectStandardOutput = true;
        startInfo.RedirectStandardError = true;
        Process p = Process.Start(startInfo);
        string outstring = p.StandardOutput.ReadToEnd();
        string errstring = p.StandardError.ReadToEnd();
        p.WaitForExit();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读