2011-08-02 4 views
2

私のプロジェクトは、はるかに大きなプロジェクトへのプラグインです。大きなプロジェクトのバグは、アプリケーションをクラッシュさせるファイルを作成します。彼らはすでに問題を認識しており、それに対処していますが、その間に唯一の回避策は、各ユーザーのappdataディレクトリ内の特定のファイルを削除することです。すべてのユーザーのAppDataディレクトリを検索

小さなプラグインのインストール時に、問題のあるファイル(存在する場合)を削除するために、すべてのユーザーのappdataディレクトリに移動する予定です。各ユーザのappdataディレクトリを見つける方法はありますか?これはインストールであることを忘れないでください。管理者権限が与えられます。私が見てきたものの中には、その後、それだけで何とか私が取得する方法がわからない午前のIntPtrを、取得の問題だろう

WindowsIdentity.Impersonate(IntPtr someUser) 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

を使用することです。

これは私が今持っている最良の解決策です。では、どのようにして各ユーザーのIntPtrを取得できますか?または、より良い解決策がありますか?

私が考えることができる次善策は、単にC:\Users\eachUser\AppData\のすべてのディレクトリを通過して存在するファイルを削除することです。しかし、再びXPの場所はC:\Documents and Settings\eachUser\Application Data\でなければならず、私はオペレーティングシステム固有のコードを作成していました。提案? WindowsIdentity.Impersonate Method (IntPtr userToken)から

答えて

4

のIntPtrはUserToken Windowsアカウントトークンのハンドル...

です。このトークンは、通常Win32 API LogonUser関数の呼び出しなど、アンマネージコードの呼び出しによって取得されます。

したがって、すべてのユーザー名とパスワードを持っていない限り、このようにすることはできません。

編集:現在のユーザーのみの実行時にファイルを削除してみませんか?あなたのプラグインはこれを行う権限を持っていますか?

編集2:インストールするユーザーのディレクトリをEnvironment.GetFolderPath(Environment.SpecialFolder.ApplicationData)から使用し、Directory.GetDirectoriesを使用して、プロファイルを持つ他のユーザーを見つけることができます。次に、特別なフォルダ名をタックすることができます。かなり丸いですが、それはあなたの "ピンチ"で動作するかもしれません。

+0

プラグインは大きなアプリケーションから実行され、大きなアプリケーションはクラッシュしてからコードを実行します。プラグインがそこにあることを期待していないためクラッシュします。削除するファイルは、プラグインをリストするファイルであり、プラグインリストを再作成する必要があります。 – SaulBack

+0

次に、私のEdit2があなたの最高の選択肢だと思います。 –

+0

私はこれを行う方法について醜いラウンドを行わなければならないのではないかと心配しました。しかし、助けてくれてありがとう。 – SaulBack

関連する問題