私は自分のアプリケーションをテストして、管理者以外のユーザーが実行したときにどれだけうまく機能するかを確認してきましたが、ファイル処理に問題があることがわかりました。ファイルが管理ユーザーによって作成された場合、ファイルを上書きしようとするとUnauthorizedAccessExceptionが発生します。
ファイルを書き出すときは、最初にファイルを.tmpファイルとして作成し、次にFile.Copyを使用して元のファイルを上書きします。.tmpファイルは作成されますが、File.Copyは失敗します。私のファイルはパブリックディレクトリ(XPでは「C:\ DocumentsandSettings \ AllUsers \ ApplicationData」)に書き込まれます。
すべてのユーザーがアプリケーションファイルを完全に制御できるようにするにはどうすればよいですか?
私はこれを見つけました:
System.Security.AccessControl.DirectorySecurity sec =
System.IO.Directory.GetAccessControl ( directory );
FileSystemAccessRule accRule = new FileSystemAccessRule ( Globals.userIdentity,
FileSystemRights.FullControl, AccessControlType.Allow );
sec.AddAccessRule ( accRule );
すべてのファイルが配置されているディレクトリに対して上記を実行すると、この問題は解決しますか?または、各ファイルに対して何かを行う必要がありますか?もしそうなら、それは何ですか?
編集:
管理者以外のユーザーは、管理者ユーザーが作成したファイルを変更することはできません。これは良くない。すべてのファイルをすべてのユーザーが編集できるようにする必要があります。これを許可するファイルが最初に作成されたときに設定できるある種のアクセス許可はありませんか?