Relative Pfad-Problem mit .Net Windows-Dienst..?
Ich habe einen windows-service, der versucht, Zugriff auf eine xml-Datei aus dem Verzeichnis der Anwendung.
Windows-Dienst Installiert Verzeichnis : C:\Services\MyService\MyService.exe
Pfad der xml-Datei : C:\Services\MyService\MyService.xml
Ich versuche, den Zugriff auf die Datei mit dem folgenden code.
using (FileStream stream = new FileStream("MyService.xml", FileMode.Open, FileAccess.Read))
{
//Read file
}
Bekomme ich die folgende Fehlermeldung.
"Kann nicht gefunden Datei : C:\WINDOWS\system32\MyService.xml"
Meinen Dienst läuft mit dem lokalen Systemkonto und ich möchte nicht den absoluten Pfad.
InformationsquelleAutor Amitabh | 2010-04-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine elegante Lösung für dieses aus dem folgenden link.
http://haacked.com/archive/2004/06/29/current-directory-for-windows-service-is-not-what-you-expect.aspx/
Als mein Dienst ausgeführt wird sowohl als Konsole/Dienstleistung, die ich gerade genannt
bevor es läuft als Service E. g.
auch mein Leben gerettet
Sie können hinzufügen, ein anderes Leben zu der Liste
InformationsquelleAutor Amitabh
Müssen Sie den Pfad zu Ihrem service, der assembly, wie folgt:
Location
in diesem Fall eher alsCodeBase
... finden Sie in der MSDN-Dokumentation für die info.Ein weiteres problem ist, dass Sie mit
typeof(MyClass).Assembly
um die hauptassembly des Programms.Assembly.GetEntryAssembly()
ist zuverlässiger, wieder.Im Gegenteil. Der code sollte funktionieren, egal wer nennt seine Montage.
Ich denke, Sie verfehlen den Punkt. Sie wissen nicht, wo dieser code definiert wird. Semantisch ist es nicht, wo die Klasse definiert ist, die uns interessiert, sondern das, was die Versammlung der OS laden der ersten für das Programm.
Ich denke nicht so. Seinen code in einer assembly, die installiert wurde, um eine bestimmte Position. Er will sich in dieser Lage, egal wie seine Montage ausgeführt wurde.
InformationsquelleAutor SLaks
Wenn ein Windows-Dienst gestartet wird, wird das aktuelle Verzeichnis ist das Verzeichnis system, als Sie tatsächlich zu sein scheinen, zu finden. Es ist das aktuelle Verzeichnis, wird verwendet, um relative Pfade in absolute Pfade, die nicht Ihre Anwendung (service -) Verzeichnis. (Überprüfen Sie die
Environment.CurrentDirectory
variable, wenn Sie wollen, um dies zu bestätigen.)Folgende helper-Methode kann praktisch sein hier:
Die Sie dann verwenden können, wie:
Der Pfad wird dann beheben zu
C:\Services\MyService\MyService.xml
, wie Sie wollen.Sorry, du hast Recht. Es behebt den richtigen Weg, schrieb ich einfach das falsche 'richtige Weg'. 😉
GetAbsolutePath(string relativePath) vielleicht eine bessere Methode name.
Nein, es ist zu vage...
InformationsquelleAutor Noldorin