2017-10-20 2 views
-1

So habe ich ein Projekt installiert, das einen Dienst und ein Formular hat. Der Dienst lädt XML-Dateien, die das Formular erstellt. Das Problem ist, da der Pfad und AppDatas sind unterschiedliche Form zu bedienenSo kommunizieren Sie ordnungsgemäß zwischen Dienst und Formular mit XML

mit
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

ich den Dienst auf Benutzerkonto installieren musste, anstatt lokales System. Ich stelle fest, dass die meisten Dienste als lokales System installiert sind. Wie würde sich dies auf die Leistung des Dienstes auswirken, oder gibt es eine bessere Möglichkeit, dies zu erreichen?

+0

Das System hat keine Umgebung, daher gibt es keinen Pfad zum Ordner. Ich denke, der normale Prozess besteht darin, ein Projekt im Admin-Account zu haben und dann als Admin laufen zu lassen. Die Ausführung als Benutzerkonto ist gleichwertig, aber dann hat der Benutzer Zugriff auf die Änderung (es sei denn, Sie sind der Benutzer). Die Leistung basiert auf dem Festlegen der Priorität des Dienstes. Häufig wird ein als Systemdienst ausgeführter Dienst so eingestellt, dass er mit normaler Priorität ausgeführt wird, so dass die Leistung des Betriebssystems nicht beeinträchtigt wird. So sollte jeder Dienst der Priorität entsprechend seinen Anforderungen eingestellt werden. – jdweng

Antwort

0

Ihre Frage grenzt an zu breit. Es gibt viele Möglichkeiten, wie Sie Ihr Szenario angehen können. Das heißt, da Sie bereits eine Implementierung haben, können wir sie kommentieren, um die spezifischen Teile Ihrer Frage zu adressieren.

Erstens sollte als normaler Benutzer ausgeführt wird in Ordnung sein, den Dienst unter der Annahme korrekt unter diesem Konto arbeiten wird. Es ist nicht ideal, aber sollte wirklich nichts verletzen. In der Regel erfordert ein Dienst erhöhte Rechte, was sowohl darauf zurückzuführen ist, dass es sich um einen Dienst handelt, als auch darum, warum er als lokales System oder lokaler Dienst ausgeführt wird. Wenn Ihr Dienst diese Berechtigungen nicht benötigt, ist die Verwendung eines Benutzerkontos in Ordnung.

Das heißt, aus Ihrer Beschreibung klingt es wie das GUI-Programm wird den Dienst Steuerung von XML-Dateien zu einem besonderen Ort zu schreiben, die der Dienst für Uhren und liest. Diese Verwendung des Dateisystems als eine Form der Interprozesskommunikation (IPC) ist selbst nicht ideal und ich würde einen anderen Ansatz empfehlen.

Da Sie bereits XML-basierte I/O, ich würde vorschlagen, Named Pipes oder eine andere Netzwerk/socket-basierte IPC. Sie können ein Stream-Objekt wickeln (z PipeStream oder NetworkStream) in einem StreamWriter und StreamReader und dann die normalen XML Sachen verwenden Sie bereits entsprechend lesen und schreiben mit.

Eine weitere Alternative ist WCF. Es gibt ein bisschen Lernkurve und Sie haben weniger Kontrolle über die genaue Serialisierung, die zur Übertragung Ihrer Daten verwendet wird. Der Vorteil ist jedoch, dass Sie mit der Unterstützung von Visual Studio weniger Zeit für die Implementierung der XML/Serialisierungsseite benötigen Sie können neue Clients für den Service erstellen, indem Sie sie einfach in Visual Studio hinzufügen. Die IDE erstellt die erforderlichen Datenstrukturen und die Konfiguration für die Verbindung mit dem Dienst.

In beiden Fällen können Sie Ihren Dienst unter dem lokalen Systemkonto ausgeführt werden als typisch für einen Dienst wären und die Fragen Sie nur gefragt sind geht weg. :)

Verwandte Themen