【问题标题】:Start/Stop service from an ASP . NET page从 ASP 启动/停止服务。网页
【发布时间】:2012-10-05 07:34:16
【问题描述】:

我实现了一个网页(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"/>

【问题讨论】:

  • 看起来不需要模拟来读取服务的状态。这就是它起作用的原因:-(

标签: asp.net windows-services impersonation


【解决方案1】:

这里提出的解决方案http://support.microsoft.com/kb/306158

Dim LOGON32_LOGON_INTERACTIVE As Integer = 2
Dim LOGON32_PROVIDER_DEFAULT As Integer = 0

If LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
    [...]
End if

这对我不起作用。

我将 LOGON_32_LOGON_INTERACTIVE 替换为 LOGON32_LOGON_SERVICE:

Dim LOGON32_LOGON_INTERACTIVE As Integer = 2
Dim LOGON32_LOGON_NETWORK As Integer = 3
Dim LOGON32_LOGON_BATCH As Integer = 4
Dim LOGON32_LOGON_SERVICE As Integer = 5
Dim LOGON32_LOGON_UNLOCK As Integer = 7
Dim LOGON32_LOGON_NETWORK_CLEARTEXT As Integer = 8
Dim LOGON32_LOGON_NEW_CREDENTIALS As Integer = 9
Dim LOGON32_PROVIDER_DEFAULT As Integer = 0

If LogonUserA(userName, domain, password, LOGON32_LOGON_SERVICE,LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
    [...]
End if

它对我有用:ASP .NET 页面可以启动/停止服务。

【讨论】:

    【解决方案2】:

    就我而言,LOGON32_LOGON_INTERACTIVE 和 LOGON32_LOGON_SERVICE 都不起作用。

    但是,LOGON32_LOGON_NETWORK 对我有用。请注意,用户具有管理员权限,因此能够启动/停止 Windows 服务。

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      相关资源
      最近更新 更多