我在我的应用程序中使用Shutdown.exe,因为它提供了一些很好的功能,例如它可以延迟关闭并添加注释,为什么需要关闭。
应用规格可以关机,重启,注销,休眠,混合关机,添加注释,延迟关机,并中止计划关机。
应用程序很好,花花公子我已经制作了一个安装文件。我现在尝试在本地安装并使用它。但是当我尝试点击hybernate时,它只是关闭...我点击重启,它关闭,与其他人一样。
我很确定我正在使用正确的参数组合
这是我使用的参数
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,请分享。
关心所有
答案 0 :(得分: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);
}
}