Interaktiver Dienst unter Vista

realYeti

Mitglied
Hy Leute,

viele von Euch die das jetzt lesen, denken wieder mein Gott - bitte nicht !! aber es muß leider sein. Ich hab hier nen Dienst der mir in späterer Folge einen Webservice der mit einer Datenbank verbunden ist kontaktiert und dann im Falle der Statusänderung eine .exe aufruft.

Nun ist das unter Vista nicht mehr so leicht zu realisieren. wie unter XP ..... aber vielleicht hat ja einer von Euch ne Idee.

Ausgangslage: Der Dienst läuft auf einem Rechner auf dem Windows Vista (32Bit) installiert ist.

So schaut die Klasse aus - zumindest ein schneller Entwurf davon (Sorry für die Notation...)

Code:
Imports System.IO
Imports System.Environment
Imports System.Diagnostics

Public Class cStartenViewer

    Dim watcher As New FileSystemWatcher()
    'Die wo Du starten willst
    Dim mAusfuerenExe As String = "C:\Program Files\Test.exe"
    'Da hast an Property für dein Teamviewer.exe
    Public Property AusfuerenExe() As String
        Get
            Return mAusfuerenExe
        End Get
        Set(ByVal value As String)
            mAusfuerenExe = value
        End Set
    End Property

    Public Sub DS_aenderung()
        Try
            Dim startInfo As System.Diagnostics.ProcessStartInfo = Nothing
            startInfo = New System.Diagnostics.ProcessStartInfo(mAusfuerenExe)
            Dim ss As New System.Security.SecureString()
            ss.AppendChar("A")
            ss.AppendChar("B")
            ss.AppendChar("7")
            startInfo.Domain = "Domain"
            startInfo.UserName = "User"
            startInfo.Password = ss
            startInfo.WindowStyle = ProcessWindowStyle.Normal
            Dim pStart As New System.Diagnostics.Process

            EventLog.WriteEntry("TestDienst", "Pfad der Datei: " & AusfuerenExe)
            startInfo.UseShellExecute = False
            pStart.StartInfo = startInfo

            EventLog.WriteEntry("TestDienst", "pStart wurde angestossen")
            If pStart.Start() Then
                'EventLog.WriteEntry("TestDienst", "nach p.Start-oben")
                Dim p As String = "TestProzessTVw"
                p = pStart.ProcessName
                'EventLog.WriteEntry("TestDienst", p.ToString & " vorher")
                pStart.WaitForExit(10)
                EventLog.WriteEntry("TestDienst", "Prozessende: " & p.ToString)
                EventLog.WriteEntry("TestDienst", "Test.exe wurde aufgerufen")
            Else
                EventLog.WriteEntry("TestDienst", "Test.exe konnte nicht aufgerufen werden")
            End If
        Catch ex As Exception
            EventLog.WriteEntry("TestDienst", ex.Message)
        End Try
    End Sub

    'Stoppen der Überwachung
    Public Sub StopWatching()
        watcher.EnableRaisingEvents = False
    End Sub


End Class

THX - für jede Hilfe, und bitte verzichtet auf: Warum eillst du unbedingt eine .exe starten.....
 
Öhm ja, und wo genau ist das Problem? Gibt es Fehlermeldungen? Wird die Anwendung nicht ausgeführt?

Hat dein Dienst die entsprechenden Berechtigungen diese Anwendung auszuführen usw. Fragen über Fragen.
 
Hy Norbert,

ja klar kommt ne Fehlermeldung, er führt das Programm wohl nicht in der selben Session aus. Weis jetzt aber ehrlich gesagt auch ned so recht wie ich das hinbekommen kann. Eigentlich müsste er des ja als der User machen, dem ich ihn explizit im Thread zugewiesen habe. Der Dienst wird unter dem selben Namen ausgeführt (Administrator Rolle)

Code:
Fehlerhafte Anwendung TeamViewer.exe, Version 3.5.4140.0, Zeitstempel 0x47d79a5f, fehlerhaftes Modul USER32.dll, Version 6.0.6001.18000, Zeitstempel 0x4791a7a6, Ausnahmecode 0xc0000142, Fehleroffset 0x00009cac, Prozess-ID 0x700, Anwendungsstartzeit 01c8afa897f68450.

THX für die Hilfe.
 
Schon versucht eine etwaige Exception abzufangen und mitzuschreiben? Eventuell erhältst du daraus mehr Informationen.
 
Klar kann ich den Debuggen, aber das bring nicht mehr als die Ausgaben im Event log.

Bei CodeProject hab ich ein C++.NET Projekt gesehen der genau das macht was ich eigentlich vorhabe.... nur leider ist mein C++ ziemlich für die Fische. Irgendwie holt er sich da ein Token und .....

hier mal der Link falls des einer lesen kann.. Klick
 
Zurück