2012-06-19 34 views
1

上午在我的應用程序中使用Shutdown.exe,因爲它提供了一些很好的功能,例如它可以延遲關機並添加註釋爲什麼需要關機。C#使用Shutdown.exe只是關機

的應用規格可以關機,重啓,註銷,休眠,混合關機的東西,添加評論,延遲關機,並中止定時關機。

該應用程序是不錯,花花綠綠,我做了一個安裝文件。我現在嘗試在本地安裝並使用它。但是當我嘗試點擊hybernate時,它只是關機...我點擊重啓,關閉,並與其他人一樣。

我敢肯定,我現在用PARAMATERS

的正確組合,這是我用

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,請分享它。

問候所有

+3

您可以發佈您的代碼顯示你如何調用帶有參數的exe? –

+0

大多數'shutdown'命令行選項在所有Windows系統上都不可用;例如'/ a'(abort)選項僅在Windows Server 2003和更高版本IIRC上受支持。也許你在一個較舊的操作系統(2000,XP)上部署應用程序? –

+0

嗨弗雷德裏克和克里斯 - 首先,在我開始應用程序之前。我使用命令控制檯,我使用的是Windows 7和Windows 8測試它 - 這是我創建的應用程序
http://wall.jaysonragasa.net/wall/post/2012/06/17/Windows- 8-System-Power-Shortcuts.aspx –

回答

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); 
     } 
    } 
+0

我打算去API,但如果該API調用需要一些提升的控制,那麼我可以訴諸於此。感謝您的分享,但我保留這 –

+0

您是否有辦法讓Wort中止計劃關機? –