WordとAmyuni PDFスイートを使用して書式設定されたPDFファイルを作成するC#プログラム(.Net 4.61)のクラスがあります。プロセスの間に、4つの仮のPDFファイルは、ユーザーのTempフォルダに作成されます。一時ファイルを削除するときにC#appが例外なく終了する
private string TempFolder = Path.GetTempPath();
プロセスが完了すると、私はプロセス中に生成された一時ファイルを削除するために実行し、次のクリーンアップの方法があります。
private void EraseTempFiles()
{
// For each temp file:
foreach (string tempFile in TempFiles)
{
if (File.Exists(tempFile))
{
File.Delete(tempFile);
}
}
}
を
ほとんどすべてのデプロイされたWindowsシステム(すべての64ビットWindows 7システム)で動作しますが、EraseTempFilesメソッドが一時ファイルの3分の1を削除すると、アプリケーションはただちに終了します。例外はスローされません(私はFile.Deleteをtry-catchで囲んでこれを判断しました)。
ファイルはWindowsエクスプローラを使用しても問題なく削除できます。
私は、すべての一時ファイルを別のフォルダに保存し、名前の変更方法を変更してみました。アプリケーションを追跡するためにProcDumpを実行すると、何かをキャッチしていない、それは単に報告:
[23:54:52] The process has exited.
[23:54:52] Dump count not reached.
を私はまた、未処理の例外イベントに加入しました:
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);
private void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
System.Windows.Forms.MessageBox.Show(((Exception)e.ExceptionObject).Message);
throw new NotImplementedException();
}
ハンドラとも呼ばれないこと。
このようなプログラムの終了を説明することはありませんでした。 Windows自体が何らかの違反でプロセスを強制終了しているようですが、すべての一時ファイルが基本的に同じで、最初の2つを問題なく削除できるので、私は何もわかりません。
誰もこのタイプの動作を以前に見ましたか?
Windowsイベントログを調べましたか? –
は 'permissions'のように聞こえます。試し釣りの周りの削除を包んで、それがあなたにそれを教えているかどうか、なぜそれが削除されなかったのかを確かめてみてください。 – MethodMan
これは私の純粋な推測で、なぜ塩の穀物を取るべきですか? Windowsは削除中に同じファイルにアクセスしようとしています。システムからは、コードを優先して操作します。そしてあなたの状態は実行中無効なので、例外はありません。 foreachループ全体にわたって、システム全体のmutexを取得するつもりです。 https://msdn.microsoft.com/en-us/library/system.threading.mutex(v=vs.110).aspxこれにより、アプリケーションが遅くなることはありません。 –