2013-10-11 25 views
1

我希望能夠關閉或重新啓動運行ASP.NET應用程序的服務器。下面的代碼在調試模式下的偉大工程:在C#和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(); 

我也嘗試這種代碼,但我收到以下錯誤「Process對象必須具有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; 

然後錯誤」 Process對象必須具有UseShellExecute屬性設置爲false爲了ŧ o以用戶身份啓動進程「消失,但代碼像第一個代碼塊一樣執行

當我在調試模式下執行代碼時,服務器將重新啓動,或者如果我運行的命令是cmd。但是,當我在服務器上運行應用程序時,它不會重新啓動。我沒有收到任何錯誤,或者彈出說服務器正在或不會重新啓動。有人可以告訴我,我做錯了什麼?

更新:我已經添加了一個try-catch並且該應用程序從不引發異常。但是,當我查找事件日誌時,發現應用程序錯誤事件1000 for shutdown.exe

+0

http://stackoverflow.com/a/8283042/64262 – andleer

+10

學習您的ASP代碼沒有與管理員權限一起運行,難道不難理解嗎? – 2013-10-11 18:21:32

+0

當AppPool在LocalSystem或LocalService帳戶下運行時,可能出現[從ASP.NET應用程序重新啓動服務器]的副本(http://stackoverflow.com/questions/8282987/restart-server-from-asp-net-application-when-apppool -is-ran-under-localsystem-or) – Habib

回答

0

您的應用程序池運行的帳戶沒有足夠的權限來重新引導系統,這就是爲什麼它沒有發生。

您可以通過登錄到服務器並隨後轉到Control Panel > Administrative Tools > Local Security Policy,擴展Security Settings > Local Policies > User Rights Assignment節點並轉到Shut down the system設置來更改此設置。將應用程序池帳戶(或其父組,如果您有一個組)添加到該列表中。

+0

我不確定如何找到正在應用程序池下運行的帳戶。我認爲它是管理員 – nate

+0

您可以通過轉到IIS管理器瀏覽到您的應用程序所在的文件夾並單擊「基本設置」來查看。這會顯示應用程序池的名稱。轉至「應用程序池」,按名稱查找應用程序池,然後查看「高級設置」查找該帳戶。如果它顯示'NetworkService'或'ApplicationPoolIdentity',請將其更改爲專用帳戶(請勿使用您自己的帳戶!) – Alex

+0

我將身份更改爲管理員帳戶,並在本地安全策略中添加了管理員帳戶。我仍然無法重新啓動服務器。 – nate

相關問題