Leggi il file di registro utilizzato da un altro processo

Obbiettivo

Voglio premere un pulsante sulla GUI e leggere il file seclog.log (log AV di Symantec) da una macchina remota e visualizzare il contenuto del registro in una casella di testo rich nella mia applicazione.

Cose che funzionano

tutto tranne leggere il file di registro

Messaggio di errore

System.IO.IOException was unhandled Message=The process cannot access the file '\\HOSTNAME\C$\Program Files (x86)\Symantec\Symantec Endpoint Protection\seclog.log' because it is being used by another process. Source=mscorlib 

codice

 //possible seclog paths String seclogPath1 = @"\\\\" + target + "\\C$\\Program Files (x86)\\Symantec\\Symantec Endpoint Protection\\seclog.log"; String seclogPath2 = @"\\\\" + target + "\\C$\\Program Files\\Symantec\\Symantec Endpoint Protection\\seclog.log"; //if seclog exists if (File.Exists(seclogPath1)) { //output.AppendText("file exists at " + seclogPath1); //var seclogContent = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); Stream stream = File.OpenRead(seclogPath1); StreamReader streamReader = new StreamReader(stream); string str = streamReader.ReadToEnd(); output.AppendText(str); streamReader.Close(); stream.Close(); } 

Cose che ho provato

Il file viene utilizzato da un altro processo

C # Il processo non può accedere al file ” ‘perché è utilizzato da un altro processo

Googling il problema

usando i filestreams in più modi

 //possible seclog paths String seclogPath1 = @"\\\\" + target + "\\C$\\Program Files (x86)\\Symantec\\Symantec Endpoint Protection\\seclog.log"; String seclogPath2 = @"\\\\" + target + "\\C$\\Program Files\\Symantec\\Symantec Endpoint Protection\\seclog.log"; //if seclog exists if (File.Exists(seclogPath1)) { //output.AppendText("file exists at " + seclogPath1); //var seclogContent = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); Stream stream = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //File.OpenRead(seclogPath1); StreamReader streamReader = new StreamReader(stream); string str = streamReader.ReadToEnd(); output.AppendText(str); streamReader.Close(); stream.Close(); } 

cosa dovevo cambiare

ho dovuto creare un filestream di readwrite

codice originale

 Stream stream = File.OpenRead(seclogPath1); StreamReader streamReader = new StreamReader(stream); 

nuovo codice

 Stream stream = File.Open(seclogPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); //File.OpenRead(seclogPath1); StreamReader streamReader = new StreamReader(stream); 
 using (StreamReader sr = new StreamReader(filePath, true)) { sr.Close(); //This is mandatory //Do your file operation }