kein Service restart (Spooler) trotz Admin Rechte

  • VB.NET
  • .NET (FX) 4.5–4.8

    kein Service restart (Spooler) trotz Admin Rechte

    Hallo liebe Comunety,

    ich habe ein Programm in VB.Net (VS2017 Comunity, .NET Framework 4.7.02046) geschrieben welches mir Drucker-Treiber aus der registrierung sucht und entfernt, damit das letzlich einen effeckt hat und nicht der Rechner neu gestartet werden muss kann man über das Progi auch den Spooler neu starten. Es funzt aber nur bedingt, und zwar wenn ich admin am system bin, leider soll das Tool bei non Admin Usern verendet werden. Das soll meinen ein user (kein Admin) wie auch immer ist angemeldet aber das tool soll ein admin ausführen also wird das tool mit nem admin user gestartet also im prinzip "ausführen als Administrator", das hab ich dem Tool über ein Manifest schon mitgegeben, man muss also schon beim Start den Admin User angeben. Also mit angemeldetem Admin User funzt es aber nicht wenn ein NonAdmin angeledet ist, am System nicht am Tool, am Tool ist der Admin zum Start angemeldet.

    Ich bekomme keine Fehlermeldung, ich sehe das nur daran das der Drucker der entfernt werden soll eben noch immer da ist und erst dann verschwindet wenn ich den Spooler manuell neustarte und ich mich bei den Diensten auch abermals als Admin angemeldet habe.

    Muss ich den ServiceControler speziell das Recht dazu extra mitgeben oder wie geht das????

    #Manifest:

    <requestedExecutionLevel level="asInvoker" uiAccess="false" />
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    <requestedExecutionLevel level="highestAvailable" uiAccess="false" />

    Durch Angeben des requestedExecutionLevel-Knotens wird die Datei- und Registrierungsvirtualisierung deaktiviert.
    Wenn Sie Datei- und Registrierungsvirtualisierung für Abwärts-
    kompatibilität verwenden möchten, löschen Sie den requestedExecutionLevel-Knoten.
    -->
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
    </requestedPrivileges>
    <applicationRequestMinimum>
    <defaultAssemblyRequest permissionSetReference="Custom" />
    <PermissionSet Unrestricted="true" ID="Custom" SameSite="site" />
    </applicationRequestMinimum>
    </security>
    </trustInfo>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>


    #Code: ist in einer Klasse

    Public Function SpoolerServiceRestart() As String

    Dim LoopCounter As Integer = 0
    Dim counter As Integer = 0
    Dim SpoolerStatus As String = ""
    Dim time As System.TimeSpan = System.TimeSpan.FromMilliseconds(10000)

    '------------------------------------------------------------------------------------------------------------------------------------------------------

    '-- Nachfolgende Schleife wird benötigt um den Status des des Spoolers
    '-- Werte zu zu weisen, damit sichergestellt wird, das auch wirklich ein
    '-- Neustart des Spoolers erfolgt!

    If service.Status.ToString = "Running" Then
    counter = 2 '------------------------------- wenn der Spooler lauft
    Else
    counter = 3 '------------------------------- wenn der Spooler nicht lauft
    End If

    '------------------------------------------------------------------------------------------------------------------------------------------------------

    Try

    Do Until LoopCounter = counter

    If service.Status.Equals(ServiceControllerStatus.Stopped) Or service.Status.Equals(ServiceControllerStatus.StopPending) Then

    service.Start()
    service.WaitForStatus(ServiceControllerStatus.Running, timeout:=time)
    service.Close()
    LoopCounter = LoopCounter + 1

    Else

    service.Stop()
    service.WaitForStatus(ServiceControllerStatus.Stopped, timeout:=time)
    service.Close()
    LoopCounter = LoopCounter + 1

    End If

    Loop

    Catch ex As Exception

    service.Close()
    SpoolerStatus = "--------------------------------" & vbCrLf & "ERROR in SpoolerServiceStartStop!" & vbCrLf & service.Status.ToString & vbCrLf & ex.Message & vbCrLf & "--------------------------------"

    End Try

    SpoolerStatus = "SPOOLER SERVICE RESTARTED!"

    Return SpoolerStatus

    End Function