Tal vez habría que manejar otra alternativa y pasar al código no manejado .El último code puede ser tu respuesta, no lo he probado pero ... http://stackoverflow.com/questions/860656/how-does-one-figure-out-what-process-locked-a-file-using-c
Al final, retocando un poco este código he conseguido obtener el proceso que abre mi documento.La función que devuelve la enumeración de procesos la he modificado para que no distinga mayúsculas y minúsculas, que ese era mi problema .
Código:
public static List<Process> GetProcessesUsingFile(string fName)
{
List<Process> result = new List<Process>();
foreach (var p in Process.GetProcesses())
{
try
{
foreach (var file in DetectOpenFiles.GetOpenFilesEnumerator(p.Id))
{
if (file.ToUpper().Contains(fName.ToUpper()))
result.Add(p);
{
}
}
//if (DetectOpenFiles.GetOpenFilesEnumerator(p.Id).Contains(fName))
//{
// result.Add(p);
//}
}
catch { }//some processes will fail
}
return result;
}
Código:
public static int GetProcessIdUsingFile(string fName)
{
int result = 0;
foreach (var p in GetProcessesUsingFile(fName))
{
if (p.Id != 0)
{
result = p.Id;
break;
}
}
return result;
}
Muchas gracias por tu ayuda, Novlucker, eres un fenómeno.