Ich habe einen Code welcher als VB.NET über einen button aufgerufen funktioniert.
Es muss allerdings ein Service sein. Beim Service hört er aber dort auf, wo er den Process starten soll.
Spoiler anzeigen
Spoiler anzeigen
Spoiler anzeigen
Spoiler anzeigen
Jemand ne idee wie ich die Datei mit Word aus dem Service aufrufen kann?
Es muss allerdings ein Service sein. Beim Service hört er aber dort auf, wo er den Process starten soll.
Public Class Service1
VB.NET-Quellcode
- Public Shared XDoc1 As XDocument = XDocument.Load("C:\mqcit\mqcitconfig.xml") 'Laden der XML-Config-Datei
- Public Shared logpath As String = (XDoc1.<mqcit>.<config>.<logpath>.Value) 'Laden des Logpfad
- Public Shared docpath As String = (XDoc1.<mqcit>.<config>.<docpath>.Value) 'Pfad für die Worddatei
- Public Shared maxlogsize As Integer = (XDoc1.<mqcit>.<config>.<maxlogsizebyte>.Value) 'Maximale Größe der Log Datei in Byte
- Public Shared timertime As Integer = (XDoc1.<mqcit>.<config>.<timermilliseconds>.Value) 'Wie oft soll das Programm aufgerufen werden, in Millisekunden
- Public Shared Message As String 'Variable für Logmessage
- Public Shared alreadyrun As Boolean = False 'Läuft der Ablauf bereits?
- Protected Overrides Sub OnStart(ByVal args() As String)
- Timer1.Interval = timertime
- Timer1.Start()
- End Sub
VB.NET-Quellcode
- Public Shared Sub OpenDocuments()
- If alreadyrun = False Then
- alreadyrun = True
- Try
- ' Zunächst wird nach einem Worddokument gesucht
- Dim file As String
- Dim oDir As New System.IO.DirectoryInfo(docpath) '...wird der Ordner zum auslesen vorbereitet
- Dim oFiles As System.IO.FileInfo() = oDir.GetFiles() '...werden alle Dateien ausgelesen
- Dim oFile As System.IO.FileInfo '...wird eine Datei gelesen
- For Each oFile In oFiles '...für jedes file wird überprüft...
- If oFile.Extension = ".docx" Or oFile.Extension = ".doc" Then '....ob es die Endung doc oder docx hat, wenn ja...
- file = oFile.FullName 'wird der Dateipfad mit Datei in der Variablen file gespeichert.....
- Message = ("Folgende Datei wird bearbeitet: " & oFile.Name) 'und eine Meldung ausgegeben.
- Writemessage(Message)
- Exit For
- End If
- Next
- 'Nun wird das Worddokument aufgerufen
- If Not file Is Nothing Then 'Zunächst wird überprüft, ob überhaupt eine Datei gefunden wurde
- 'Ausführen und beenden des Prozesses Word
- Dim prozess As New Process
- prozess = Process.Start(file) 'falls ja wird der Prozess gestartet also Word geöffnet und zum Überwachen in der Variable prozess gespeichert
- While prozess.HasExited = False 'solange der Prozess offen ist wird nichts getan.
- Continue While
- End While
- If prozess.HasExited = True Then 'wenn der Prozess beendet wurde, wird überprüft ob der Prozess keine Fehler gemeldet hat und eine entsprechende Meldung ausgegeben.
- If prozess.ExitCode = 0 Then
- Message = (file & " wurde erfolgreich importiert.")
- Writemessage(Message)
- Else
- Message = ("Fehler beim importieren der Datei " & file)
- Writemessage(Message)
- End If
- DeleteDocument(file)
- End If
- End If
- Catch ex As Exception
- Message = (ex.ToString)
- Writemessage(Message)
- End Try
- alreadyrun = False
- End If
- End Sub
VB.NET-Quellcode
- Public Shared Sub Writemessage(ByVal logmessage As String) 'wenn die Methode Writemessage aufgerufen wird...
- If System.IO.Directory.Exists(logpath) = False Then 'überprüfen ob der Temp Ordner vorhanden ist
- System.IO.Directory.CreateDirectory(logpath) 'Falls nicht wird dieser erstellen
- End If
- If My.Computer.FileSystem.FileExists(logpath & "\log.txt") = True Then 'Wenn das Lofile schon existiert,
- If My.Computer.FileSystem.GetFileInfo(logpath & "\log.txt").Length >= maxlogsize Then 'wird überprüft ob die maximale Loggröße erreicht ist
- My.Computer.FileSystem.DeleteFile(logpath & "\log.txt") 'falls ja wird das logfile gelöscht.
- End If
- End If
- Using fw As New System.IO.StreamWriter(logpath & "\log.txt", True) 'Legt falls nicht vorhanden das Logfile an , und verbietet ggf. das Überschreiben
- fw.WriteLine(Now() & " " & logmessage) 'Schreibt in den Log das Datum , und die mitgegebene Message.
- End Using
- End Sub
VB.NET-Quellcode
- Public Shared Sub DeleteDocument(ByVal datei As String)
- 'Löschen der bearbeiteten Datei
- If System.IO.File.Exists(datei) Then 'Prüfen ob die Datei noch existiert
- My.Computer.FileSystem.DeleteFile(datei) 'Datei löschen
- If System.IO.File.Exists(datei) Then 'Prüfen ob die Datei noch existiert
- Message = ("Fehler beim löschen der Datei " & datei)
- Writemessage(Message)
- Else
- Message = (datei & " wurde erfolgreich gelöscht")
- Writemessage(Message)
- End If
- End If
- 'Löschen der temporären Dateien
- Dim aDir As New System.IO.DirectoryInfo(docpath) '...wird der Ordner zum auslesen vorbereitet
- Dim aFiles As System.IO.FileInfo() = aDir.GetFiles("~$*") '...werden alle Dateien ausgelesen
- Dim aFile As System.IO.FileInfo '...wird eine Datei gelesen
- For Each aFile In aFiles
- My.Computer.FileSystem.DeleteFile(aFile.FullName) 'Temp Datei wird gelöscht
- Message = ("Die Temporäre Datei " & aFile.FullName & " wurde gelöscht.")
- Writemessage(Message)
- Next
- End Sub
Jemand ne idee wie ich die Datei mit Word aus dem Service aufrufen kann?
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Kaze91“ ()