Cita de: Novlucker en 6 Noviembre 2012, 17:57 PMAl final, retocando un poco este código he conseguido obtener el proceso que abre mi documento.
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
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 [Seleccionar]
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;
}
Y además me he creado otra que devuelve la id del primer proceso (en mi caso sólo habrá un proceso con mi documento, o eso espero

Código [Seleccionar]
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;
}
Y a partir de ahí ya esta todo controlado, se crea el System.Diagnostics.Process con la id y a esperar que termine.

Muchas gracias por tu ayuda, Novlucker, eres un fenómeno.