我在内部ASP.net应用程序中有一些代码,如果它们在运行Web应用程序的服务器上停止,我们将使用它来启动自动服务。唯一的问题是它在服务器上运行时似乎没有启动服务。当它在我的桌面本地运行时它确实很好,所以我猜我必须给ASP.net用户提供某些安全设置?
这是我的代码:
protected void StartService(object sender, EventArgs e)
{
LinkButton serviceButton = (LinkButton)sender;
string name = serviceButton.ID;
ManagementPath path = new ManagementPath();
path.Server = System.Environment.MachineName;
path.NamespacePath = @"root\CIMV2";
path.RelativePath = "Win32_service.Name='" + name + "'";
ManagementObject service = new ManagementObject(path);
ManagementBaseObject temp = service.InvokeMethod("StartService", null, null);
Thread.Sleep(100);
GetStoppedServices();
}
任何人对如何使其发挥作用有任何想法?
编辑:为了澄清,网络应用程序与我想要启动服务的服务器在同一台服务器上运行。
编辑2:有一个脑波,并尝试使用此代码..没有骰子。
ProcessInfo = new ProcessStartInfo("cmd.exe", "/C net start " + name);
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
Process = Process.Start(ProcessInfo);
Process.Close();
答案 0 :(得分:1)
可能是访问权限问题。当您在本地运行应用程序(通过Visual Studio和内置的Cassini Web服务器)时,我认为您正在以自己的身份运行它,因此它可以正常工作。
当您通过IIS(在服务器上)运行应用程序时,它将作为应用程序池中指定的任何用户运行。 (我认为它默认为“网络服务”)。检查它在IIS中的用户并尝试授予该用户启动服务的权限。
您运行的是哪个版本的IIS?如果它是一个Win 2K3服务器,我猜6.0。
有关配置应用程序池的信息:
编辑:您可以使用SubInACL.exe(微软工具)配置服务权限:
因此,假设您拥有“Johnny”用户,并且您希望Johnny能够停止并启动World Wide Web Publishing服务。只需运行以下subinacl.exe命令:
subinacl / service W3SVC / GRANT = YOURDOMAIN \ Johnny = TO
显然,您需要将YOURDOMAIN替换为域名。最后的TO是标识符,告诉subinacl您实际想要授予Johnny的操作。 T用于“开始服务”,O用于“停止服务”。
有关更多信息,请查看Ingmar的blog post。
答案 1 :(得分:1)
适用于Windows 7,Windows Server 2008,Windows Server 2008 R2,Windows Vista
打开IIS管理器。(从开始 - >运行 - >输入inetmgr并按回车键)
在“连接”窗格中,展开服务器节点,然后单击“应用程序池”。
在“应用程序池”页面上,选择要为其指定标识的应用程序池,然后单击“操作”窗格中的“高级设置”。
对于Identity属性,单击“...”按钮以打开“应用程序池标识”对话框。
如果要使用内置帐户,请选择内置帐户选项,然后从列表中选择一个帐户。从列表中选择本地系统
如果要使用自定义标识,请选择“自定义帐户”选项,然后单击“设置”以打开“设置凭据”对话框。然后在“用户名”文本框中键入自定义帐户名,在“密码”文本框中键入密码,在“确认密码”文本框中重新键入密码,然后单击“确定”。
单击“确定”关闭“应用程序池标识”对话框。
右键单击应用程序拉动,然后停止并再次单击开始
答案 2 :(得分:0)
不要使用System.Management对象来控制服务,而是查看ServiceController类。开始/停止/暂停的所有方法都是可用的,并且结构更加结构化。
但是,您可能仍会遇到权限问题。您的Web应用程序的执行帐户将需要权限来控制您希望影响的目标服务。
根据您的平台(Win Serv的哪个版本),将针对您的Web应用程序的匿名请求执行不同的帐户。验证哪些帐户发挥作用(或者如果您有经过身份验证的请求,您了解您的用户)并确定其对Windows服务的权限。