Excelがファイルの編集を終えたことを検知したいのですが、Excelプロセスの終了検知も、開いているファイルのリード権をポーリングする方法でも誤検知してしまいます。
確実に編集を終えたことを検知する方法はないのでしょうか。

今のところ想像ですが、
https://support.microsoft.com/en-us/kb/981094/ja
の現象で、excelが上書き保存のタイミングでxlsxファイルを一度手離す気がしています。

コードですが以下のような感じで、終了監視しています。

System.Diagnostics.Process p = System.Diagnostics.Process.Start(filename);
if (p != null)
{
   p.WaitForExit();
   while (System.IO.File.Exists(filename))
   {
       System.Threading.Thread.Sleep(1000);
       try
       {
           using (System.IO.FileStream fs =
               new System.IO.FileStream(
                   filename,
                   System.IO.FileMode.Open,
                   System.IO.FileAccess.Read,
                   System.IO.FileShare.None))
           {
               break;
           }
       }
       catch
       {
           continue;
       }
   }
}
else
{
   while (System.IO.File.Exists(filename))
   {
       System.Threading.Thread.Sleep(1000);
       try
       {
           using (System.IO.FileStream fs =
               new System.IO.FileStream(
                   filename,
                   System.IO.FileMode.Open,
                   System.IO.FileAccess.Read,
                   System.IO.FileShare.None))
           {
               break;
           }
       }
       catch
       {
           continue;
       }
   }
}

よろしくお願いします。