如何从ASP.NET中关闭机器

本文关键字:机器 NET ASP | 更新日期: 2023-09-27 18:04:54

我有一台运行Windows Home Server v1 (WHS基于Windows Server 2003并且运行IIS6)的机器,在这里我有一个rest式的web服务运行,我在c# VS2008 (dotnet 3.5)中构建。从内部的web服务,我希望能够;1检查某些windows服务是否正在运行;2启动部分windows服务3停止部分windows服务4重启机器5关机

对于1-3,然后我使用模拟将asp.net用户提升为本地管理员(只有我在本地安全网络上运行此操作),然后使用"ServiceController"来控制服务。

For For 4 &我有问题,不能让它工作。

如果我使用System.Diagnostics.Process调用带有参数"/s/f"的"shutdown.exe"命令,则该进程执行时没有任何错误,但不做任何事情!没有关机,没有例外什么都没有,我不知道为什么。我已经尝试设置本地管理员用户名&密码,但它没有帮助,并且冒充用户呼叫没有帮助。

我的代码
string shut_args = "/s /f /t 10";
Process process1 = new Process();
process1.StartInfo.FileName = "shutdown.exe";
process1.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System);
SecureString password = new SecureString();
foreach (char c in "mypassword")
     password.AppendChar(c);
process1.StartInfo.Password = password;
process1.StartInfo.Domain = "homeserver";
process1.StartInfo.UserName = "Administrator";
process1.StartInfo.Arguments = shut_args;
process1.StartInfo.CreateNoWindow = true;
process1.StartInfo.UseShellExecute = false;
process1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;                                
impersonateValidUser();
process1.Start();

所以我试图使用WMI(代码取自另一个帖子在这里),但在这里我得到一个"特权不持有"错误时,试图调用InvokeMethod

Mycode

ManagementBaseObject mboShutdown = null; ManagementClass mcWin32 = new ManagementClass    ("Win32_OperatingSystem"); mcWin32.Get();        
            mcWin32.Scope.Options.Impersonation = ImpersonationLevel.Impersonate;
            mcWin32.Scope.Options.Authentication = AuthenticationLevel.Connect;
            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"] = "1";        
            mboShutdownParams["Reserved"] = "0";        
            foreach (ManagementObject manObj in mcWin32.GetInstances())        
            {
                mboShutdown = manObj.InvokeMethod("Win32Shutdown", mboShutdownParams, null);        
            }

我还检查了asp.net和NETWORK_SERVICE用户的所有安全设置,他们有权关闭服务器,也为这些用户设置了WMI安全设置。但我就是不知道哪里出了问题。

任何想法?

欢呼

如何从ASP.NET中关闭机器

您是否尝试过运行一个简单的批处理文件,而不是在ASP中启动关闭过程?净吗?整个过程描述如下:使用ASP远程关机/重启。净

老问题,但我想自己做,刚刚找到答案。所以试试这个:

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "shutdown";
startInfo.Arguments = "/s /t 5";
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();