tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1809
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    AllieAusNotebook AllieAusNotebook ist offline Mitglied
    Registriert seit
    Dec 2007
    Beiträge
    10
    Hallöchen!
    Ich muss etwas weiter ausholen: ich habe zuerst, um die Funktionalität zu testen, eine Windows-Application in Visual Studio 2005 angelegt und meinen Code getestet. Alles funktionierte wunderbar, also habe ich im VS 2005 gesagt, "Windows-Dienst" und die Onstart bzw. onstop Prozeduren gefüllt.

    Dann habe ich gesagt "veröffentlichen". Im VS 2005 Ordner / Projects / PdfPrinter / PdfPrinter / bin / Debug gibt es dann eine

    - exe-Datei
    - Application-Datei
    - exe.config-Datei
    - exe.manifest-Datei
    - pdb-Datei
    - vshost.exe-Datei
    - vshost.exe.manifest
    - vshost.application
    - vshost.exe.config

    und einen .publish-Ordner. Ich habe nun zuerst auf die Exe-Datei geklickt und "Ausführen als" gesagt. In den Windowsprozessen erscheint dann der PdfPrinter, es geschieht aber nichts. Dann habe ich bei MSDN ein bisschen herumgesurft und installutil gefunden. Darüber habe ich dann versucht, das als Dienst zu installieren. Wenn ich das richtig verstanden habe, sollte er danach in der Diensteliste erscheinen. Dort ist er aber nicht. Er hat angeblich beim Ausführen von installutil.exe keine Installationsdateien gefunden.

    Die InstallState-Datei wird entfernt, da keine Installer vorhanden sind.

    Die Commitphase wurde erfolgreich abgeschlossen.

    Die transaktive Installation ist abgeschlossen.
    Nun, sowas habe ich noch nie gemacht und habe ehrlich gesagt Null Ahnung davon. Mein Try & Error hilft mir nicht weiter, genauso wenig wie die Dokumentationen, die ich dazu gefunden habe. Demnach habe ich alles richtig gemacht. Ich bin als SysAd eingeloggt, an den Berechtigungen kann es auch nicht liegen. Kann mir hier irgendwer weiterhelfen?

    Danke,
    Allie
     

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Hast du denn in für deinen Dienst eine Installer-Klasse geschrieben, mit der du die Parameter für die Diensteinstallation festlegst?

    http://www.codeproject.com/KB/dotnet...wsservice.aspx
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    AllieAusNotebook AllieAusNotebook ist offline Mitglied
    Registriert seit
    Dec 2007
    Beiträge
    10
    Okay, zu meiner Schande muss ich gestehen, dass ich bis dato noch keine Installerklasse hatte.
    Meine Installerdatei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    
    Imports System.ComponentModel
    Imports System.Configuration.Install
    Imports System.Diagnostics
    Imports System.ServiceProcess.ServiceInstaller
    Imports System
    Imports System.Collections
    Imports System.ServiceProcess
     
     
    <RunInstaller(True)> Public Class ProjectInstaller
     
    #Region " Component Designer generated code "
     
        Public Sub New()
            MyBase.New()
     
            Initializecomponent()
        End Sub
     
     
        Protected Overloads Sub Dispose( _
        ByVal disposing As Boolean)
     
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            Me.ServiceProcessInstaller1.Dispose()
     
            'MyBase.Dispose(disposing)
     
        End Sub
     
        'Benötigt vom Component-Designer
        Private components As System.ComponentModel.IContainer
     
        Friend WithEvents ServiceProcessInstaller1 As _
        System.ServiceProcess.ServiceProcessInstaller
     
        Friend WithEvents ServiceInstaller1 As _
        System.ServiceProcess.ServiceInstaller
     
        Private Sub Initializecomponent()
     
            Me.ServiceProcessInstaller1 = _
            New System.ServiceProcess.ServiceProcessInstaller()
     
            Me.ServiceInstaller1 = _
            New System.ServiceProcess.ServiceInstaller()
     
            '
            'ServiceProcessInstaller1
            '
            Me.ServiceProcessInstaller1.Account = _
            System.ServiceProcess.ServiceAccount.LocalSystem
            Me.ServiceProcessInstaller1.Password = Nothing
            Me.ServiceProcessInstaller1.Username = Nothing
            '
            'ServiceInstaller1
            '
            Me.ServiceInstaller1.DisplayName = "PdfPrinter"
            Me.ServiceInstaller1.ServiceName = "PdfPrinter"
            '
            'ProjectInstaller
            '
            Me.ServiceProcessInstaller1.Installers.AddRange(New System.Configuration.Install.Installer() _
             {Me.ServiceProcessInstaller1, _
             Me.ServiceInstaller1})
            'Me.Installers.AddRange( _
            'New System.Configuration.Install.Installer() _
            ' {Me.ServiceProcessInstaller1, _
            'Me.ServiceInstaller1})
     
        End Sub
     
    #End Region
     
    End Class

    Die Servicedatei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    
    Imports System.IO
    Imports System.Threading
     
    Public Class Service1
     
        Private simpleThread As Thread
     
        Protected Overrides Sub OnStart(ByVal args() As String)
     
            simpleThread = New Thread(New Threadstart(AddressOf WorkerSub))
            simpleThread.Start()
     
        End Sub
     
        Protected Overrides Sub OnStop()
            ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen.
            simpleThread.Abort()
        End Sub
     
        Sub datei_drucken(ByVal filename As String)
            Dim schreiben As New ProcessStartInfo("cmd.exe")
     
            'wobei filename hier komplett mit Pfad übergeben werden muss, sonst gibt das nichts :o)
            '@TODO: Standarddrucker, Verzeichnisse, im Hintergrund öffnen
            schreiben.WorkingDirectory = "c:/Programme/Adobe/Reader 8.0/Reader/"
            schreiben.FileName = "AcroRd32.exe"
            schreiben.Arguments = "/p /h " & filename
     
            Process.Start(schreiben)
        End Sub
     
        Sub datei_verschieben(ByVal filename As String)
     
            Dim fpath = "c:\PDF\" & filename
            Dim zpath = "c:\PDF\done\" & filename
     
            File.Move(fpath, zpath)
        End Sub
     
        Private Sub WorkerSub()
            Dim actMinute As Integer
            actMinute = DateTime.Now.Minute
     
            While True
     
                If actMinute <> DateTime.Now.Minute Then
     
                    Dim path As String = "C:/PDF/"
                    Dim di As New DirectoryInfo(path)
     
                    Dim fi As FileInfo() = di.GetFiles()
                    Console.WriteLine("The following files exist in the current directory:")
     
                    Dim fiTemp As FileInfo
     
                    For Each fiTemp In fi
                        datei_drucken(path & fiTemp.Name)
                        datei_verschieben(fiTemp.Name)
                    Next fiTemp
     
                    actMinute = DateTime.Now.Minute
                End If
                Threading.Thread.Sleep(TimeSpan.FromMinutes(1.0))
     
            End While
        End Sub
     
    End Class

    Ich habe nun auch gelesen, dass ich ein Setupprojekt hinzufügen soll. Habe ich nun auch gemacht in meiner Projektmappe und alle Dateien dem Setup hinzugefügt. Trotzdem ist der Dienst nicht verfügbar in der Diensteliste und über installutil kommt genau das gleiche raus wie vorhin.

    Gruß,
    Allie
     

  4. #4
    AllieAusNotebook AllieAusNotebook ist offline Mitglied
    Registriert seit
    Dec 2007
    Beiträge
    10
    das Problem hat sich gelöst, es lag an der Installerklasse.

    Ich habe (hoffentlich ein kleines) noch ein weiteres:

    Ich rufe

    AcroRd32.exe /p /h c:/pdf/meinedatei.pdf

    auf über ein automatisiertes Konsolenfenster. Ohne Dienst mit diesem Befehl klappt auch der Ausdruck. Als Dienst jedoch klappt nur das anschließende Verschieben in den "done"-Ordner. Jetzt habe ich vermutet, dass das verschieben vielleicht zu schnell aufgerufen wird, während der noch den Acrobat Reader öffnet. Jetzt will er mir die PDF-Datei als XPS speichern. Oder manchmal meint er, ich hätte keinen Drucker installiert.

    Warum habe ich als laufenden Dienst solche Problem damit? Ich habe auch die Alternative /t Druckername, Treiber, Port versucht, hierüber kommt auch nichts. Bin etwas ratlos *g*

    Ciao,
    Allie
     

Ähnliche Themen

  1. Windows Dienst findet Ordner im Netzwerk nicht
    Von Pablorama im Forum .NET Web und Kommunikation
    Antworten: 5
    Letzter Beitrag: 29.04.10, 15:39
  2. Auf windows installer dienst konnte nicht zugegriffen werden
    Von geistgesicht im Forum Microsoft Windows
    Antworten: 5
    Letzter Beitrag: 25.11.09, 00:54
  3. Antworten: 0
    Letzter Beitrag: 11.02.08, 14:09
  4. Windows Dienst kennt System.Environment.SpecialFolder.CommonApplicationData nicht ?
    Von Asterix-Ac im Forum .NET Application und Service Design
    Antworten: 3
    Letzter Beitrag: 28.11.06, 20:15
  5. Service Pack 2 für Windows XP veröffentlicht
    Von Experience1986 im Forum Microsoft Windows
    Antworten: 5
    Letzter Beitrag: 19.08.04, 16:06