SO上有幾個線程描述瞭如何使用Sysinternals進程監視器等工具來檢查哪個應用程序創建了一個文件。是這樣的可能編程從.net?如何以編程方式確定哪個進程在.net中創建了一個文件?
背景:我的程序有使用它的自動化接口來遠程控制一個專有的第三方應用程序,而我從該應用程序所需要的功能之一具有這樣它會在%TEMP%
一堆臨時文件被稱爲tmpXXXX.tmp
錯誤(與.net的Path.GetTempFileName()
相同)但不刪除它們。這會導致C驅動器隨着時間的推移而變滿,最終導致應用程序失敗。我已經向製造商提交了一個bug,但我們暫時需要一個臨時解決方法,所以我想將FileSystemWatcher
放在%TEMP%
的手錶tmp*.tmp
上,收集這些文件,並且在完成對第三方應用程序的操作後,刪除他們。但是這是有風險的,因爲另一個應用程序也可能將具有相同文件名模式的文件寫入%TEMP%
,所以我只想刪除那些由NastyBuggyThirdPartyApplication.exe
創建的文件。
這無論如何可能嗎?
我知道你怎麼知道哪個文件打開了 - 但是如果它現在關閉了...... – BugFinder
可能存在的問題:如果您可以在自定義用戶帳戶下運行該程序,那麼您可以簡單地檢查文件的所有者。 – HugoRune
文件中沒有內容包含您正在尋找的信息。您在創建文件時必須「待在那裏」並監控相關應用程序,否則您必須採取欺騙手段,例如上述用戶帳戶。 –