从ASP启动/停止服务. NET页面 [英] Start/Stop service from an ASP . NET page

查看:107
本文介绍了从ASP启动/停止服务. NET页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我实现了一个网页(ASP .NET,VB)来启动/停止Windows服务.

I implemented a web page (ASP .NET, VB) to start/stop a Windows service.

我使用了拟人化,如下所述: http://support.microsoft.com/kb/306158

I used impersonification, as described here: http://support.microsoft.com/kb/306158

页面读取服务状态后,一切正常:

Everything it's ok when the page reads the service's status:

_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

当页面尝试启动(或停止)服务时出现问题:

The problem occurs when the page tries to start (or stop) the service:

_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元素,它可以工作,但是我不希望整个应用程序冒充Administrator用户(这只是一个测试):

I added the identity element in the web.config and it works, but I don't want the whole application impersonates the Administrator user (it was just a test):

<identity impersonate="true" userName="domain\user" password="password"/>

推荐答案

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

Solution proposed here http://support.microsoft.com/kb/306158 said

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:

I replaced LOGON_32_LOGON_INTERACTIVE with 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页面可以启动/停止服务.

And it works for me: the ASP .NET page can start/stop the service.

这篇关于从ASP启动/停止服务. NET页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆