Was sind die praktischen Verwendungen von Windows-Diensten? [geschlossen]


18

Ich bin neu in der Arbeit mit Windows Services. Obwohl ich gelernt habe, Windows-Dienste in VS2010 zu erstellen, möchte ich einige praktische Möglichkeiten kennen, wie Windows- Dienste verwendet werden können.

Ich habe versucht, unter Berücksichtigung des aktuellen Kontexts zu googeln, um weitere Lernprogramme zum Erstellen von Windows-Diensten zu finden.

BEARBEITEN Sie auf Prämienangebot:

Alle Antworten sind großartig, aber ich habe nach praktischen Beispielen für Windows-Dienste und deren Auswirkungen gesucht . Auf diese Weise erfahren Entwickler, wann es angebracht ist, sie in der Fallstudie zu verwenden.


28
Praxisbeispiele? Wie wäre es mit jedem Dienst, der gerade auf Ihrer Windows-Box ausgeführt wird?
Yannis

3
oder jeder daemon der auf deiner * nix box läuft
jk.

1
Ich nehme gerne klassische Musik aus dem Rundfunk auf. Mit einem Programm müsste ich um 2 Uhr morgens aufstehen und die "Aufnahme" -Taste drücken. Mit einem Dienst kann ich die Aktion im Voraus planen und ruhig schlafen. Programme sind Fernseher - Dienste sind Videorecorder.
Kilian Foth

Antworten:


42

Ein Dienst wird im Hintergrund ausgeführt, auch wenn niemand am Computer angemeldet ist. Alles, was Sie sich vorstellen können, ohne sich darauf verlassen zu müssen, dass eine Person eine App startet und auf eine Schaltfläche klickt, ist ein guter Kandidat für einen Dienst. Wenn Sie beispielsweise einen Ordner überwachen und eine Datei in diesen Ordner schreiben, müssen Sie sie auf irgendeine Weise verarbeiten. Jeder "Server", an den Sie denken - Webserver, FTP-Server, Mail-Server - ist ein Dienst, und so sind viele Hintergrundprozesse, an die Sie vielleicht nicht oft denken.

Einige Dinge, die früher als Dienste geschrieben wurden (Sicherungsdateien um 2 Uhr morgens, Erinnerungs-E-Mails um 3 Uhr morgens usw.), sind heute wahrscheinlich besser als geplante Aufgaben zu erledigen, die unter Windows 7 und höher eine enorme Flexibilität aufweisen, die der Entwickler jedoch nie erlernt hat Das System muss XP unterstützen. Sie finden auch Dienste, die diese Art von Aufgaben erledigen.


1
+1. Gute Antwort. Ihre Antwort erinnert mich daran, wie ich es geschafft habe, eine Datenbanksicherung durchzuführen. Früher, um ein Backup zu erstellen, haben wir eine SQL-Prozedur auf dem Server über einen Scheduler ausgeführt, der die exe aufruft. Die Exe, die zum Auftauchen verwendet wurde und dann fertig ist, wird von selbst geschlossen. Ich denke, ein Windows-Dienst war hier eine bessere Option.
Karthik Sreenivasan

8
Nein, hätte es nicht. Diese Aufgabe muss immer noch nicht auf Verbindungen warten. Geplante Aufgaben sind der richtige Weg, um diese Art von Problem zu lösen.
Wyatt Barnett

2
Ich habe auch viele geplante Aufgaben unter NTver <6.0 ausgeführt. . .
Wyatt Barnett

1
@Polynomial: Geplante Tasks können unter jedem Konto ausgeführt werden, zumindest für NT5 +. Alles, was unbeaufsichtigt läuft, muss protokolliert werden, damit Sie herausfinden können, warum es fehlgeschlagen ist.
Wyatt Barnett

1
Tolle Erklärung :). Unser derzeitiges Imaging-System bei der Firma, für die ich arbeite, verwendet Windows-Dienste umfassend für die Dateiverarbeitung. Ab dem Zeitpunkt, an dem die Bilder in das System gescannt werden, bis hin zur Indizierung und Archivierung und schließlich zur Ausgabe per E-Mail, Druck oder Fax sind alles Windows-Dienste.
Kelleystar

9

Dienste unter Windows sind im Grunde genommen Programme, die ohne GUI ausgeführt werden. Webserver (z. B. Apache), Datenbankserver (z. B. MySQL- und SQL-Server), Antiviren-Engines und Anwendungsserver / Middleware-Server sind praktische Beispiele für Anwendungen, die häufig als Dienste ausgeführt werden. Möglicherweise gibt es einen GUI-Client, mit dem Sie mit dem Dienst interagieren können, der Dienst selbst verfügt jedoch nicht über einen solchen. Es läuft einfach im Hintergrund und macht sein Ding. Da Dienste mit den ihnen zugewiesenen Benutzerrechten ausgeführt werden , können sie außerdem als der ihnen zugewiesene Benutzer ausgeführt werdenGibt an, ob ein Benutzer tatsächlich am Computer angemeldet ist. Ein Datenbankserver hätte also die gleichen Zugriffsrechte, unabhängig von der Person, die zum jeweiligen Zeitpunkt am Computer angemeldet war. Sie können also erkennen, warum dies wichtig ist - Sie möchten beispielsweise nicht, dass ein Benutzer angemeldet bleibt, um einen Webserver am Laufen zu halten.

Sie sind das Windows-Äquivalent (auf die praktischste Weise) zu Daemons unter * nix.


5

Bedienung

Ein Programm, eine Routine oder ein Prozess, der eine bestimmte Systemfunktion ausführt, um andere Programme zu unterstützen, insbesondere auf einer niedrigen Ebene (in der Nähe der Hardware). Wenn Dienste über ein Netzwerk bereitgestellt werden, können sie in Active Directory veröffentlicht werden, wodurch die dienstzentrierte Verwaltung und Verwendung erleichtert wird.

Ich möchte einige praktische Möglichkeiten kennen, wie Windows-Dienste verwendet werden können.

Gemäß der Service-Definition bieten Window Service und andere Arten von Services viele Funktionen. In diesem Zusammenhang sind Suchmaschinen Ihr Freund .

Windows-Dienste werden normalerweise verwendet, wenn eine Anwendung kontinuierlich ausgeführt werden muss. Sie sollten einen Windows-Dienst erstellen, um Code ohne Benutzerinteraktion im Hintergrund auszuführen .

Ein Windows-Dienst wird ausgeführt, auch wenn niemand angemeldet ist. Der Windows-Dienst kann ausgeführt werden, sobald der Computer eingeschaltet ist. Dies ist ideal, um ihn als Server, beispielsweise als http-Server, auszuführen. Niemand muss sich anmelden.

Zum Beispiel, wenn sie müssen:

  1. Warten Sie auf eingehende Anfragen. (Wie durch Remoting oder wcf)
  2. Überwachen Sie eine Warteschlange, ein Dateisystem usw. Wenn ein Programm nur in regelmäßigen Abständen ausgeführt werden muss, beispielsweise einmal am Tag. Normalerweise ist es einfacher, eine geplante Aufgabe zu erstellen.
  3. Jeder Server, der Verbindungen akzeptiert (z. B. ein Mail-, Web- oder FTP-Server), sollte normalerweise ein Windows-Dienst sein.

Ich würde einen Dienst aus folgenden Gründen nutzen:

  • Es muss keine Sitzung ausgeführt werden. Dies ist gut für die Sicherheit und reduziert den Overhead auf dem Server.
  • Sie erhalten einige der Verwaltungsbefehle kostenlos eingebaut.
    O Start
    o Stopp
    o Pause
    o Fortfahren

  • Sie können Serverereignisse wie das Herunterfahren verarbeiten.

Links mit zusätzlichen Informationen zu diesen Diensten:

Bei Asp.net - // TODONT: Verwenden Sie einen Windows-Dienst, um einen geplanten Prozess auszuführen.
Was ist die Verwendung des Windows-Dienstes?


Wie wird ein Windows-Dienst mit den höchsten Berechtigungen ausgeführt? Geplante Tasks sind beispielsweise unter stackoverflow.com/a/11561410/206730 möglich . IMHO, bessere Beispiele für
minimale

4

Ein interaktives Programm, wie z. B. eine Winform oder eine WPF, soll von einem Benutzer geöffnet, interagiert und geschlossen werden. Eine geplante Aufgabe soll zu bestimmten Zeiten im Hintergrund ausgeführt werden - möglicherweise nur gestartet, ausgeführt und angehalten werden. Ein Windows-Dienst ist etwas, das Sie ständig im Hintergrund ausführen möchten.

Einige Vorteile eines Windows-Dienstes bestehen darin, dass er ausgeführt wird, unabhängig davon, welcher Benutzer angemeldet ist (oder auch wenn keine Benutzer angemeldet sind), und dass er so eingestellt werden kann, dass er ausgeführt wird, sobald der Computer hochfährt System wird neu gestartet.

Ich habe normalerweise Dienste verwendet, wenn ich etwas wie einen Ordner oder einen E-Mail-Posteingang überwachen muss.


3

Da Sie Ihrer Frage den Hinweis zu praktischen Beispielen hinzugefügt haben, gebe ich Ihnen einige Beispiele für Dienste, die ich für Unternehmensanwendungen geschrieben habe (Sie sagen nicht, ob Sie ein Programmierer für Unternehmensanwendungen sind, aber ich vermute, dass die meisten C # VS2010-Programmierer dies sind). . Ich denke, Sie suchen nach einer Idee, was Entwickler, die nicht für Microsoft arbeiten, schreiben könnten.

Ein Heartbeat-Überwachungsdienst, der prüft, ob noch andere Programme ausgeführt werden (dies hat möglicherweise auch als geplante Aufgabe funktioniert, wurde jedoch als Dienst implementiert).

Ein Berichterstellungsdienst, der die Warteschlangen von Berichtsanforderungen abarbeitete, die Berichte ausführte und an verschiedene Drucker sendete, je nachdem, welcher Drucker ausgelastet war. Dies hat dazu beigetragen, eine Menge Arbeit von einer Legacy-Anwendung zu entfernen und den ausgeführten Bericht für mehrere kostengünstige Boxen freizugeben, auf denen der Dienst ausgeführt wird.

Es wurde als Dienst implementiert, sodass es kontinuierlich ausgeführt, beim Neustart automatisch gestartet und über die standardmäßige Windows-Dienstschnittstelle gestartet, gestoppt, angehalten usw. werden konnte Initiieren des Abrufs von Daten aus anderen Programmen oder einer persistenten Quelle (Warteschlange, Datei, Datenbank), anstatt dass andere Programme sie aufrufen können (Socket, Pipe).

Der Serverteil einer Client / Server-Anwendung wurde ebenfalls als Dienst implementiert, sodass er bei einem Neustart usw. neu gestartet wurde. Es gab ein anderes Projekt mit einer EXE-Datei, in dem dasselbe Programm ausgeführt wurde, jedoch nicht als Dienst, um die Ausführung zu vereinfachen Debug auf Entwicklungsmaschinen.

Ich hoffe das hilft. Bei den anderen Antworten handelt es sich jedoch um allgemeinere Antworten, insbesondere um die Idee, dass geplante Aufgaben für die meisten Zwecke wahrscheinlich einfacher zu schreiben und zu verwalten sind.


+1 Erklärt, wo Windows-Dienste im Detail verwendet werden. Ich bin nur begrenzt Sockets ausgesetzt (Client-Server-Modell, das über IPAddress über Ports kommuniziert), habe aber im Allgemeinen keine Pipes verwendet. Haben Rohre eine ähnliche Rolle wie Muffen?
Karthik Sreenivasan

2

Es gibt viele praktische Verwendungen für einen Dienst. Eine praktische Hauptanwendung ist die Interaktion zwischen Benutzeroberfläche und Dienstprogrammen (oder Daemon in Unix), in diesem Fall der Unterschied zwischen einem Client und einem Server. Ein Server empfängt Anforderungen, verarbeitet die Anforderung und sendet normalerweise eine Antwort zurück. Mit anderen Worten, es dient einer Anfrage. Denken Sie an SQLSERVER, IIS oder Telnet. Ein Client verwendet normalerweise einen Server, indem er Anforderungen an den Server sendet und dann die Antwort anzeigt oder verarbeitet. dh eine Dateneingabeanwendung, eine Webanwendung ... Der Server wird fast immer als Dienst in Windows (oder als Dämon in Unix) installiert, und der Client ist normalerweise nur eine normale App mit einer GUI. Es gibt viel komplexere Verwendungen eines Dienstes, aber diese werden Sie wahrscheinlich am häufigsten verwenden.

Zum Beispiel: Ich arbeite gerade an einem SIP / H323-Videoserver. Es empfängt Anforderungen von einer Anwendung mit einem SDK, das ich geschrieben habe, verarbeitet sie und antwortet zurück. Die Videoserveranwendung wird als Daemon auf einem eingebetteten Linux-Computer installiert (dies wäre ein Dienst auf einem eingebetteten Windows-Computer, aber wer Windows trotzdem zum Einbetten verwendet), und jede Anwendung, die das SDK verwendet, wird als Client betrachtet.

Natürlich könnten Sie solche Anwendungen schreiben und sie nicht zu einem Dienst machen. Sie können sie auch nach dem Start von Windows starten und im Hintergrund ausführen lassen. Es sind jedoch mehrere Registrierungseinträge und einige Eingriffe in den Code erforderlich. Die Verwendung der API ist viel einfacher als in .NET. Microsoft hat dies auf der anderen Seite durch das Erstellen von Diensten und deren Registrierung beim Betriebssystem erheblich vereinfacht. Die Implementierung ist wesentlich einfacher als die manuelle.


+1 - Zur Verdeutlichung wird der Dienst als Windows-Dienst auf dem Server gehostet. Anschließend sendet das Client-SDK Informationen über einen Port an den Server, um Daten zu übertragen und Feedback zu erhalten. Ist mein Verständnis korrekt?
Karthik Sreenivasan

1
@Karthik, beziehen Sie sich auf das Entwurfsmuster oder auf mein Beispiel? Wenn zu ersteren, ja .. oder ein Daemon in Unix. Die Kommunikation würde eine Form von TCP / IP sein. Wenn Sie sich auf mein Beispiel beziehen, ist der Videoserver ein Daemon auf einem eingebetteten Linux-Computer. Das SDK kommuniziert über einen Port, der Videoserver verfügt über eine Abhörschleife, über die er die Client-Anfragen bearbeitet.
Jonathan Henson

@Karthik, es muss übrigens nicht TCP / IP oder Pipes sein. Ich habe gesehen, dass Leute Signale mit Slots verwenden, um Interprozesskommunikation durchzuführen. Das Designmuster ist jedoch das gleiche. Wie Sie kommunizieren, hängt vom Architekten des Projekts ab.
Jonathan Henson

Ich bezog mich auf das Beispiel.
Karthik Sreenivasan

2

Beispiele für Kandidatenprogramme:

  • Systeme, die Ressourcen / andere Anwendungen überwachen und Berichte senden müssen (Benutzeraktivität, bestimmte Arten des Dateiverkehrs, Benachrichtigungen über das Fehlverhalten von Anwendungen)

  • Systeme, die Dienste für andere lokale Anwendungen anbieten (Übersetzungen, Dateikonvertierung, systemübergreifendes Messaging)

  • Antiviren Software.

Ich denke, das sind die großen Beispiele, die mit geplanten Aufgaben nicht einfach gemacht werden können.


+1 für die Beispiele. Könnten Sie sich über den Datenverkehr informieren?
Karthik Sreenivasan

1
Wenn Sie beispielsweise eine Webanwendung haben, bei der sporadische Spitzen in Datei-Uploads auftreten, möchten Sie jemanden darauf aufmerksam machen. Dies gilt auch für alle Ressourcen, bei denen zu merkwürdigen Zeiten Spitzen auftreten (z. B. Webdatenverkehr, Prozessorauslastung), die von geplanten Überprüfungen (aufgrund von Aliasing) möglicherweise nicht erkannt werden.
Linkerro

2

Meine Lieblingsbeispiele für die Nutzung von Diensten:

  1. Server - Programme, die Anforderungen von Remoteclients bedienen. Sie werden normalerweise als Dienste ausgeführt, um sicherzustellen, dass sie verfügbar sind, unabhängig davon, ob ein Benutzer am Server angemeldet ist oder nicht. Als Dienst ausführen bedeutet auch, dass der Server die Verarbeitung von Anforderungen startet, sobald der Computer gestartet wird. Nach einem Neustart des Computers muss sich niemand mehr beim Computer anmelden, um das Programm zu starten. Ein Datenbankserver ist ein gutes Beispiel.
  2. Hintergrundverarbeitung - Programme, die für die Verarbeitung von Daten aus einer Datenquelle und das Speichern von Ergebnissen in einem Datenziel verantwortlich sind. Das Datenziel ist häufig eine Quelle für einen anderen Prozess usw. Beim Ausführen als Dienst können diese Programme nur dort sitzen und auf das Eintreffen der Daten warten. Außerdem können Entwickler die Robustheit der Verarbeitung verbessern, indem sie den Prozess in mehrere halbunabhängige Schritte aufteilen.

+1 für Datenbankserver. Die Dinge fallen zusammen. Wir alle verwenden SqlConnection oder OledbConnection, um eine Verbindung zu der Datenbank herzustellen, die tatsächlich von dem Dienst verarbeitet wird, der sich auf dem Server befindet.
Karthik Sreenivasan

2

Hier ist ein Beispiel für die Verwendung des Servicekonzepts mit echtem Code (siehe unten).

Es wird ein Service-Bus konfiguriert, der eine Warteschlange belegt und Nachrichten von Webservern und Client-GUIs abhört.

Wenn es die Nachrichten empfängt, führt es die von der Domäne garantierte Logik aus, speichert die Ereignisse auf der Festplatte und veröffentlicht diese Ereignisse im Nachrichtenbroker.

Die meisten größeren Anwendungen, die lose miteinander verbunden sind, implementieren eine Art "Worker" -Architektur wie die folgende.

Das Documently-Projekt ist ein Beispielprojekt, mit dem Sie verteilte Architekturen erlernen können. Sie können mir direkt im Projekt Fragen stellen oder eine Funktion implementieren, um daraus zu lernen, und dann eine Pull-Anfrage senden (und Codekommentare abrufen).

https://github.com/haf/Documently/blob/master/src/Documently.Domain.Service/Program.cs :

using System.Threading;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using Documently.Infrastructure;
using Documently.Infrastructure.Installers;
using MassTransit;
using Topshelf;
using log4net;
using log4net.Config;

namespace Documently.Domain.Service
{
    class Program
    {
        private static readonly ILog _Logger = LogManager.GetLogger(typeof (Program));

        private IWindsorContainer _Container;
        private IServiceBus _Bus;

        public static void Main(string[] args)
        {
            Thread.CurrentThread.Name = "Domain Service Main Thread";
            HostFactory.Run(x =>
            {
                x.Service<Program>(s =>
                {
                    s.ConstructUsing(name => new Program());
                    s.WhenStarted(p => p.Start());
                    s.WhenStopped(p => p.Stop());
                });
                x.RunAsLocalSystem();

                x.SetDescription("Handles the domain logic for the Documently Application.");
                x.SetDisplayName("Documently Domain Service");
                x.SetServiceName("Documently.Domain.Service");
            });
        }

        private void Start()
        {
            XmlConfigurator.Configure();
            _Logger.Info("setting up domain service, installing components");

            _Container = new WindsorContainer()
                .Install(
                    new RavenDbServerInstaller(),
                    new CommandHandlerInstaller(),
                    new EventStoreInstaller(),
                    new BusInstaller(Keys.DomainServiceEndpoint)
                    );

            _Container.Register(Component.For<IWindsorContainer>().Instance(_Container));
            _Bus = _Container.Resolve<IServiceBus>();

            _Logger.Info("application configured, started running");
        }

        private void Stop()
        {
            _Logger.Info("shutting down Domain Service");
            _Container.Release(_Bus);
            _Container.Dispose();
        }
    }
}

+1 zur Veranschaulichung mit einem Beispiel. Ich werde versuchen, Ihr Beispiel zu implementieren, um ein besseres Verständnis zu erhalten.
Karthik Sreenivasan

2

Vor einiger Zeit hat mein Team hier in Brasilien drei Windows-Services für eine Bank implementiert:

  • Schnittstelle zwischen Systemen: Wir hatten eine Front-Office-Anwendung, die für die Buchung von Geschäften an der Börse verantwortlich war, und eine Back-Office-Anwendung, die für die Abrechnung und Berechnung der Handelsgebühren verantwortlich war. Anfänglich wurde die systemübergreifende Kommunikation direkt auf SQL Server durchgeführt, aber zu viele Sperr- und Aufbewahrungsprobleme führten dazu, dass das System unter einer schlechten Leistung litt. Es wurde ein Service implementiert, der sowohl eine Verbindung mit der Front- als auch mit der Back-Datenbank herstellt und das richtige Lesen / Schreiben mit einer Art Aufbewahrungsstrategie ausführt habe eine Masseneinfügung durchgeführt, die 40x schneller war als die ursprüngliche Lösung, und viele der beteiligten Tabellen für eine lange Zeit nicht gesperrt hat).

  • Message Queue: Zusammen mit der vorherigen Lösung haben wir einen benutzerdefinierten Message Queue-Handler geschrieben, sodass mehrere Stapelverarbeitungsprozeduren asynchron ausgeführt werden können. Dies wurde sowohl in MSMQ als auch in IBM-MQSeries integriert.

  • Zentralisierung von Unternehmensdiensten: Mehrere Benutzeranwendungen benötigten beispielsweise gemeinsame Daten als Aktienkurse. Daher haben wir einen benutzerdefinierten Dienst geschrieben, der für den Empfang von "Preisanfragen" und das Zurücksenden der Preisinformationen zuständig ist.

Einer der Aspekte, die uns dazu veranlassten, Dienste anstelle von "Robotern" zu schreiben, ist, dass Dienste als ein bestimmter Benutzer ausgeführt werden können (wie bereits in diesem Thread erwähnt) und automatisch beim Hochfahren des Computers initiiert werden können.

Dienste benötigen zum Ausführen auch keinen Desktop- oder Fensterverwaltungsdienst. Sie können im Hintergrund ausgeführt werden (nun, sie müssen im Hintergrund ausgeführt werden).

Und wenn Sie wie einige Kollegen von mir sind, die keine Benutzeroberflächen schreiben möchten, stellen Dienste große technologische Herausforderungen dar, da sie in der Regel nicht ausfallen dürfen. Es macht also sehr viel Spaß, einen Service zu schreiben. :)


+1 Live-Beispiel. Durch all die guten Antworten, die hier von allen gegeben wurden, verstehe ich jetzt besser, wie Windows-Dienste angemessen genutzt werden, und ich denke, dass andere Programmierer von diesem Wissensaustausch auf jeden Fall profitieren werden. Einige der Implementierungen, an denen ich in der Vergangenheit gearbeitet habe, hätten besser mit Windows-Diensten implementiert werden können.
Karthik Sreenivasan

0

Wenn Sie eine Windows-Desktopanwendung entwerfen, die als Standardbenutzer ausgeführt werden muss, aber manchmal eine Aufgabe ausführen muss, für die Administratorrechte erforderlich sind, können Sie einen Dienst verwenden.

Ihr Installationsprogramm installiert den Dienst mit den erforderlichen Berechtigungen. Ihre Desktopanwendung ruft den Dienst auf, wenn eine Aufgabe mit Administratorrechten ausgeführt werden muss.

Dieser Ansatz hat Auswirkungen auf die Sicherheit, die über den Rahmen dieser Antwort hinausgehen.


Wenn ich das richtig verstehe, können Windows-Dienste nicht ohne Administratorberechtigung aufgerufen werden.
Karthik Sreenivasan

2
Nein, Windows-Dienste können nicht ohne Administratorrechte installiert oder gestartet werden. Aber jeder Benutzer kann mit ihnen kommunizieren, wenn der Dienst lauscht (denken Sie an Sockets, Named Pipes usw.)
Eclipse

1
Natürlich kann ein Standardbenutzer einen Windows-Dienst starten und aufrufen. Der Dienst muss von einem Administrator installiert werden.
Jim In Texas

0

Für Programmierer ist der Hauptgrund für die Nutzung des Dienstes:

  • Dieses Programm muss nach einem Neustart automatisch auf einem Windows-Computer gestartet werden.

Alles, was Sie schreiben, was den obigen Anforderungen entsprechen muss, muss als Windows-Dienst ausgeführt werden.


0

Der nützlichste Dienst, den ich aus der Sicht des
Endbenutzers geschrieben habe: * Der Benutzer druckte UGLY-Rechnungen auf einem Nadeldrucker mit RAW-Druckertreiber.
* Der Benutzer wollte eine PRETTY-Rechnung mit Logo und glatten Linien.
* Kein Zugriff auf Legacy-Code.

Der Dienst würde:
* Überwachen (mehrerer) Druckerordner auf Druckaufträge.
* Erstellen Sie ein PDF der Rechnung.
* PDF wäre eine schöne leere Rechnung Bild „Unterlage“
der Rohtext * Overlay
* nachschlagen Metadaten, basierend auf Ordner verwendet: (IE Drucker verwendet wird)

dann die Metadaten würde:
* PDF generieren
* und / oder Drucken von PDF
* und / oder die PDF in einen endgültigen Zielordner
* ablegen und / oder die PDF löschen
* und / oder senden Sie die PDF-Rechnung per E-Mail an den Kunden

In diesem Fall werden Ghost-Script-, SPS- und PDF-Engines verarbeitet. Es läuft seit Jahren sehr sauber. Logdateien einbinden !!!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.