2016-08-19 8 views
1

Sysinternalsプロセスモニタのようなツールを使ってどのアプリケーションがファイルを作成するかを調べる方法を記述したSOがいくつかあります。このような何かがプログラム的に.netから可能ですか?プログラムでどのプロセスが.netでファイルを作成したかを調べる方法は?

背景:私のプログラムは、オートメーションインターフェイスを使用して独自のサードパーティアプリケーションをリモートコントロールする必要があります。このアプリケーションから必要な機能の1つは、tmpXXXX.tmpと呼ばれるテンポラリファイルを%TEMP% (.netのPath.GetTempFileName()と同じですが)削除しません。これにより、Cドライブが時間の経過とともにいっぱいになり、最終的にはアプリケーションが失敗します。私はすでにメーカーにバグを提出していましたが、当面は一時的な回避策が必要なので、の時計%TEMP%FileSystemWatcherを入れてこれらのファイルを収集し、サードパーティ製アプリケーションの操作が終了した後、それら。しかし、これは他のアプリケーションが同じファイル名パターンのファイルを%TEMP%に書き込むかもしれないので、私はNastyBuggyThirdPartyApplication.exeによって作成されたものだけを削除したいので、これは危険です。

これはどういうことですか?

+0

私はどのファイルを開いているかを知る方法を知っていますが、現在閉じていないと... – BugFinder

+0

可能なwrokaround:カスタムユーザーアカウントでプログラムを実行できる場合は、ファイルの所有者を確認するだけです – HugoRune

+0

探している情報が含まれているファイルには何も固有のものはありません。ファイルが作成され、問題のアプリケーションを監視するとき、または上記のユーザーアカウントなどのトリッキーに頼る必要があります。 –

答えて

0

このようなことは可能ですが、ややこしいかもしれません。

  1. ファイルの作成者を知るには、そのファイルを所有しているユーザーを調べます。したがって、特定のユーザーを作成する必要があり、そのアプリケーションはこの特定のユーザーの下で実行されます。これを行うには、別のユーザーを偽装してバグの多いアプリを起動する小さなアプリケーションを作成する必要があります。そのため、アプリ内で実行されるものはすべてこのユーザーの下に作成されます...

  2. I don 'ファイルの作成時にどのように監視して起動するかを知っていますが、5分または10分ごとに起動するタイマーを設定できない場合は、ディレクトリ内のファイルがアプリケーションユーザによって所有され、それを削除します。

  3. このバグ修正のために反応が速い場合は、アプリを非常に長くする必要はありません。ちょうどたくさんのスペースを持つ別のドライブ、にTempフォルダを...変更する可能性のあるのであれば、別の解決策は、

+0

私は現在、このシステムで別のユーザーを作成することはあまり簡単ではないため、当面はオプション3を選択しています。これは、測定装置の束を制御するシステムであり、非常に特殊な構成が必要です。ユーザーとグループはドメインによって処理され、私はそこで何かを変更する危険は望んでいません。しかし、この特殊なアプリケーションだけが使用するファイルの背後には、ファイルが独自の形式であるため、パターンがありました。だから私は、ファイルに特定の位置に特定のものが含まれているかどうかを確認して、削除するかどうかを確認するだけです。 – rabejens

0

一つの解決策は、あなたが自動的にすべてのファイルを削除するFileWatcherを使用することであるが、前を削除しますそのファイルが現在ロックされていないか、他のプロセスで使用されているかどうかを確認する必要があります。たとえば、Sysinternal Suiteにはhandle.exeというツールがあります。コマンドラインから、それを使用します。

handle.exe

-aは

あなたはファイル

だから何をするだろうことです(ただし、いくつかのパフォーマンスの問題があるかもしれません)のAC#のプログラムからこれを呼び出すことができます(例えば、Is there a way to check if a file is in use?で提供されているコードを使用できます)を使用しているかロックしているかを確認してから削除します。

ほとんどの場合、アプリケーションが一時ファイルを使用しているとき、あなたが恐れていることを防ぐためにアプリケーションをロックし、他のプロセスからファイルを削除する可能性があります。

私が知る限り、どのプロセスが特定のファイルを作成したのかを特定する方法はありません。

関連する問題