Starten / Beenden des Dienstes von einem ASP. NET Seite

Ich habe eine Webseite (ASP .NET, VB) implementiert, um einen Windows-Dienst zu starten / stoppen.

Ich habe Identitätswechsel verwendet, wie hier beschrieben:http://support.microsoft.com/kb/306158

Alles ist in Ordnung, wenn die Seite den Status des Dienstes liest:

_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

Das Problem tritt auf, wenn die Seite versucht, den Dienst zu starten (oder zu beenden):

_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

Bemerkungen:

Die Ausnahme ist "Zugriff verweigert", aber der imitierte Benutzer ist sowohl für den Status als auch für den Start / Stopp derselbeDer Benutzer ist derselbe Benutzer, den ich am PC angemeldet habe. Und ich kann Benutzer von der Service-Konsole aus starten / stoppen

Irgendeine Idee?

Ich habe das Identitätselement in die web.config eingefügt und es funktioniert, aber ich möchte nicht, dass die gesamte Anwendung die Identität des Administratorbenutzers annimmt (es war nur ein Test):

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage