刚开始学C#,想做一个button响应来关机。从网上看了各种代码,以下是一个: using System.Diagnostics; namespace shutdown private void button1_Click(object sender, EventArgs e) |
|
10分 |
直接执行就可以了,不用设置这个参数
|
参数删掉了,可是弹出一个系统的提示,大概意思是你愿意让这个程序更改系统吗 |
|
p.StandardInput.WriteLine(“shutdown -s”); |
|
10分 |
//MyValue是目标计算机
ConnectionOptions op = new ConnectionOptions(); } |
10分 |
Process p = new Process(); p.StartInfo.FileName = "shutdown.exe"; p.StartInfo.Arguments = "-s -t 1"; p.Start(); |
只有我一个人测试了一下么
测试结果就是直接关机了,其他工作还没有保存 只能说Windows 8 64bit下测试时没有问题 |
|
10分 |
这个问题跟shutdown命令的参数有关,在命令行下输入shutdown /? 可以看到: /f 强制正在运行的应用程序关闭,不前台警告用户。 因此,把/t 后面的参数改为0即可实现非强制关机(注:Win xp的关机参数仅支持“-”,而在Win7及以上版本中,可用“/”代替“-”。 |
刚才的是Win7的解释,Win xp则不会因为-t的参数大于0而默示-f
|
|
不好说,我的机器: |
|
最后结果:
[StructLayout(LayoutKind.Sequential, Pack = 1)] internal struct TokPriv1Luid { public int Count; public long Luid; public int Attr; } [DllImport(“kernel32.dll”, ExactSpelling = true)] [DllImport(“advapi32.dll”, ExactSpelling = true, SetLastError = true)] [DllImport(“advapi32.dll”, SetLastError = true)] [DllImport(“advapi32.dll”, ExactSpelling = true, SetLastError = true)] [DllImport(“user32.dll”, ExactSpelling = true, SetLastError = true)] internal const int SE_PRIVILEGE_ENABLED = 0x00000002; private static void DoExitWin(int flg) public static void Reboot() public static void PowerOff() public static void LogoOff() 这个好使,最近很忙,先结贴了,但是闲下来还是要看看为嘛我用那段就不能关机。 |
|
用不用这么复杂,Win8和Win7一个样的,Win7和XP 也只是命令参数有点小的差异而已 Process p = new Process(); p.StartInfo.FileName = "shutdown.exe"; p.StartInfo.Arguments = "-s -t 0"; p.Start(); 只要把后面的参数改为0就不会强制关机,想强制关机就加个“-f”,第3行改为: p.StartInfo.Arguments = "-s -f -t 0"; |