2014-04-24 13 views
1

我的應用程序使用文件並嘗試在使用它之後將其刪除。但是,由於第三方庫,我的應用程序無法釋放此文件的文件句柄,因此無法刪除該文件,因爲該文件由進程本身使用。我試圖調用process.start()來啓動一個單獨的進程,其唯一的工作就是刪除前面提到的文件。我正在使用.net 4.0。但是,似乎新進程繼承了文件句柄,無法刪除文件。使用.net中的子進程刪除文件

有什麼建議嗎?

+1

您可以在應用程序打開時手動刪除文件嗎?您可能會發現沒有進程可以刪除它。 – RichieHindle

+1

在嘗試刪除之前,您是否正在啓動此新過程,然後退出當前過程? –

+0

是的,我的新進程會在嘗試刪除文件之前檢查當前文件的存在。 – user2468956

回答

0

爲什麼不同的進程能夠刪除自己的進程無法刪除的文件?這不是它的工作原理。如果是這種情況,您可以通過剛開始一個新流程來避開訪問限制。

必須關閉句柄以刪除文件。

如果庫無法正確關閉句柄,則可以啓動一個包含所有庫工作的子進程。完成後,您退出孩子。作爲流程清理的一部分,該句柄關閉。

+0

這不是訪問限制問題。我只是想解決文件句柄沒有正確發佈的問題。如果我退出當前進程,然後從命令行啓動另一個進程,則另一個進程沒有問題刪除該文件,因爲在退出原始進程時文件句柄已釋放。我在這裏想要做的是通過從原始進程中啓動文件刪除進程來自動執行此進程,然後立即退出原始進程。然後文件刪除進程一直等到原始進程退出以開始刪除文件。 – user2468956

+0

我明白。那可行。手柄只有在明確指定時纔會繼承。可能,刪除操作是在父母退出之前開始的。將父PID通信給孩子,並讓孩子在刪除之前等待退出。 – usr

+0

看來System.Diagnostic.Process.start()調用默認會從調用進程繼承文件句柄,這是造成問題的原因。 Sad Robot提出了一個解決方案,這裏是鏈接。 [鏈接](http://www.sadrobot.co.nz/2011/06/21/when-system-diagnostics-process-creates-a-process-it-inherits-inheritable-handles-from-the-parent-進程/) – user2468956