Announcement

Collapse
No announcement yet.

Dienstprogrammierung: Prozess starten.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dienstprogrammierung: Prozess starten.

    Hallo Leute.

    Zunächst einmal ein großes Lob an die Community, die ich seit langer Zeit sehr interessiert verfolge und i.d.R. auch nutznieße. Nun brauche ich jedoch Rat, da ich verzweifelt nicht mehr weiter weiß.

    Folgendes Szenario.

    Es soll verhindert werden, dass ein bestimmtes Programm beendet wird. In der Realität wird dieses kleine Tool gerne mal von den Benutzern "abgeschossen". Damit es wieder anstartet, dachte ich mir, schreibe ich einen Windows - Dienst, welcher dieses Proggi unter einem bestimmten Benutzer-Account erneut aufruft.

    Client WindowsXP SP3
    Entwicklung VB2008 Professional
    Server Windows 2003 Standart

    Hier ein Auszug aus dem Quellcode:
    ---------------------------------------------------------------------------------------------------------
    [highlight=vbnet]
    '<ZoneIdentityPermission(SecurityAction.Assert)> _
    Private Sub timer3callback(ByVal state As Object)
    'Impersonate()


    Dim s As timerstate = DirectCast(state, timerstate)
    Dim log As New System.Diagnostics.EventLog
    Dim passw As New SecureString
    Dim passwort As String

    Dim c As Char
    Dim pro() As Process = Process.GetProcesses()
    Dim p As Process
    Dim bLäuft As Boolean = False

    For Each p In pro
    If p.ProcessName = "test" Then
    bLäuft = True

    End If
    Next

    s.counter += 1


    If Not bLäuft Then
    If IO.File.Exists("c:\programme\test\test.exe") Then



    c = ""
    passwort = ""
    For i = 1 To Len(passwort)
    c = Mid(passwort, i, 1)
    passw.AppendChar(c)
    Next i

    Dim Programm As ProcessStartInfo = New ProcessStartInfo
    Dim ProgrammProcess As New Process
    Programm.UseShellExecute = False
    Programm.CreateNoWindow = True
    Programm.FileName = "c:\programme\test\test.exe"
    Programm.WorkingDirectory = "c:\programme\test\"
    Programm.Arguments = Programm.FileName
    Programm.UserName = "wilwic"
    Programm.Password = passw
    Programm.Domain = "beimir"

    Process.Start(Programm)



    End If


    End If
    'Dispose()

    End Sub
    [/highlight]
    -------------------------------------------

    Funktioniert in der WindowsForm-Anwendung auch einwandfrei. Jedoch, sofern ich dies in einem Dienst (Anmeldung egal ob als Netzwerkdienst, Lokaler Dienst oder User Account) ausführe, erhalte ich entweder:

    -- Zugriff verweigert

    oder

    -- Verzeichnis nicht vorhanden / ungültig.

    Es macht mich irre.... Kann mir jemand auf die Sprünge helfen ????
    Zuletzt editiert von uwk43; 18.05.2009, 18:52.

  • #2
    As Designed. Interaktion zwischen userdesktop und Dienst stellt einer Sicherheitslücke dar und wird ab Vista nur nach registry-Hacks unterstützt. Davor "reicht" der Haken "interaktiver Dienst".

    Und falls Verzeichnis nicht vorhanden? Liegt die Exe die du starten willst auf einem Netzlaufwerk? Dann mußt du im Dienst dich erst mit diesem Verbinden.

    Comment


    • #3
      Hi,

      zunächst einmal danke für die Denkansätze.

      Meine durch den Dienst aufzurufende Applikation läuft Clientseitig auf XP SP3 (Entwicklung mit Vb2008 Professional) und ist lokal installiert. Auch alle GPO´s, welche auf die entsprechende Usergruppe gesetzt wurden, habe ich deaktiviert (z.b. Task starten=verboten).

      Das Verzeichnis, in welchem die aufzurufende Applikation liegt, ist korrekt angegeben. Merkwürdig ist halt nur, dass der gleiche Quellcode als Windows-Form Anwendung den Task unter dem angegebenen Benutzer ausführt (Prozessliste zeigt ihn an).

      Auch den Haken beim lokalen Dienst (Interaktion zwischen Desktop und Dienst) habe ich gesetzt.

      Ich habe mal irgendwo gelesen, dass die serverseitige .NET Konfiguration auch Berechtigungen verteilen kann. Könnte es damit zusammenhängen ?



      Lege ich diesen Quellcode jedoch als Dienst fest, bekomme ich eine der beiden Fehlermeldungen.

      Es kann ja eigentlich nur irgendwo an den Berechtigungen des Dienstes liegen. Das Verzeichnis hat auch (zu Testzwecken) volle Systemberechtigung und volle Benutzerberechtigung erhalten. Keine Änderung des beschriebenen Verhaltens.
      Zuletzt editiert von uwk43; 18.05.2009, 19:32.

      Comment


      • #4
        Sicherlich könnten auch .NET-Sicherheitseinstellungen quer schießen. Dazu bin ich aber zu wenig .NET-Profi.

        Comment

        Working...
        X