| 

.NET C# Java Javascript Exception

1
Hallo an alle!

Ich habe einen Dienst in .NET 4.5 geschrieben, welches ein bestimmtes Verzeichnis überwachen soll und alle vorkommenden *.prn Dateien zu einem bestimmt Drucker kopiert (ausdruckt). Das klappt auch soweit ganz gut. Jetzt sollen aber zusaätzlich die fertig gedruckten Dateien in ein Zielverzeichnis verschoben werden. Als einfach Anwendung funktioniert das tadellos, aber mein Dienst bekommt eine Zugriffsverletzung.

System.UnauthorizedAccessException: Access to the path is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalMove(String sourceFileName, String destFileName, Boolean checkHost)
at FilePrintMonitorSrv.FilePrintMonitorSrv.OnCreated(Object sender, FileSystemEventArgs e) in d:\Projekte\FilePrintMonitorSrv\FilePrintMonitorSrv\FilePrintMonitorSrv.cs:line 144


Mein Dienst ist als NetworkServce konfiguriert und ich habe folgende Abhängigkeiten definiert LanmanWorkstation und eventlog.

Wie muß ich meinen Dienst konfigurieren (und wo) damit der die benötigten Rechte erhält?

In meinem Test habe ich nur lokale Verzeichnisse gewählt, aber es sollen auch Netzfreigaben verwendet werden können.

Vielen Dank im Vorraus für eure Hilfe.

Thorsten

PS: Hier ist mein entsprechender Sourcecode

string strDest = "";
string strError = "";

//Zuerst die Datei drucken
Process myProcess = new Process();
try {
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.WorkingDirectory = "C:\windows\system32";
myProcess.StartInfo.FileName = "cmd.exe"; //strBatchCommand;
myProcess.StartInfo.Arguments = "/C type \"" + e.FullPath + "\" > " + m_strPrinter;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.Start();
strError = myProcess.StandardError.ReadToEnd();
if(strError.Length > 0) {
objLogger.e(TAG, strError);
}
else {
objLogger.d(TAG, "Die Datei mit dem Namen: " + e.Name + " wurde gedruckt");
}
myProcess.WaitForExit();
}
catch(Exception ex) {
objLogger.e(TAG, ex.ToString());
}

//jetzt überprüfen, ob das Zielverzeichnis existiert
if(!System.IO.Directory.Exists(m_strDestpath)) {
try {
System.IO.Directory.CreateDirectory(m_strDestpath);
}
catch(Exception ex) {
objLogger.e(TAG, "Zielverzeichnis '" + m_strDestpath + "' konnte nicht erstellt werden!");
objLogger.e(TAG, ex.ToString());
}
}

//jetzt die gedrucke Datei verschieben
strDest = System.IO.Path.Combine(m_strDestpath, e.Name);
try {
System.IO.File.Move(e.FullPath, strDest); //Hier die Zeile 144
}
catch(Exception ex) {
objLogger.e(TAG, "Datei '" + e.FullPath + "' konnte nicht nach '" + m_strDestpath + "' verschoben werden!");
objLogger.e(TAG, ex.ToString());
}
News:
26.01.2015
tschroeer 35 4
2 Antworten
0
OK, das Problem hat sich gerade gelöst. Ich muß natürlich dem NetworkService auch die Rechte an den beiden Verzeichnissen geben.

Aber mal eine andere Frage: Ist NetworkService überhaupt richtig, oder muß ich ihn als LocalService laufen lassen? Ich kenne mich da leider nicht so gut aus.
26.01.2015
tschroeer 35 4
0
Bei meinem derzeitigen Kunden werden Dienste, die auf Netzwerkressourcen zugreifen müssen, unter einer eigens dafür konfigurierten Benutzerkennung ausgeführt.

Gruß
Klaus
27.01.2015
luedi 2,0k 1 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH