4

Windows サービスを開始/停止する Web ページ (ASP .NET、VB) を実装しました。

ここで説明されているように、なりすましを使用しました: 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 に ID 要素を追加しましたが、動作しますが、アプリケーション全体が管理者ユーザーになりすますことは望ましくありません (これは単なるテストでした)。

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

2 に答える 2

2

ここで提案されたソリューション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ページはサービスを開始/停止できます.

于 2012-10-15T13:55:24.687 に答える
1

私の場合、LOGON32_LOGON_INTERACTIVE と LOGON32_LOGON_SERVICE の両方が機能しません。

ただし、LOGON32_LOGON_NETWORK は機能します。ユーザーには管理者権限があるため、Windows サービスを開始/停止できることに注意してください。

于 2015-02-13T16:17:52.860 に答える