我实现了一个网页(ASP .NET、VB)来启动/停止 Windows 服务。
我使用了拟人化,如此处所述:http: //support.microsoft.com/kb/306158
页面读取服务状态时一切正常:
_domain = Me.TextBoxDomain.Text
_user = Me.TextBoxUserName.Text
_password = Me.TextBoxPassword.Text
_s = New ServiceController(Constant.ServiceName)
If impersonateValidUser(_user, _domain, _password) Then
Me.LabelServerStatusValue.Text = _s.Status.ToString
undoImpersonation()
Else
'Error
End If
当页面尝试启动(或停止)服务时会出现问题:
_domain = Me.TextBoxDomain.Text
_user = Me.TextBoxUserName.Text
_password = Me.TextBoxPassword.Text
_s = New ServiceController(Constant.ServiceName)
If impersonateValidUser(_user, _domain, _password) Then
If _s.Status = ServiceControllerStatus.Stopped And _s.Status <> ServiceControllerStatus.StartPending Then
_s.Start()
_s.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(5))
End If
undoImpersonation()
Else
'Error
End If
评论:
- 例外是“拒绝访问”,但模拟用户是相同的,无论是状态还是启动/停止
- 该用户与我登录PC的用户相同。我可以从服务控制台启动/停止用户
任何的想法?
我在 web.config 中添加了标识元素并且它可以工作,但我不希望整个应用程序模拟管理员用户(这只是一个测试):
<identity impersonate="true" userName="domain\user" password="password"/>