File.SetAccessControl()
メソッドとFileSecurity
クラスを勉強することをお勧めします。特に、FileSecurity
ドキュメントには、特定のファイルのファイルアクセス制御リスト(権限セット)を変更する完全な例が記載されています。これは、その例の簡略化されたバージョンであり、すべての人に次の読み取りおよび書き込み許可を与えますC:\TEMP\junk.txt
。
using System;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;
class WorldWrite
{
static void Main()
{
string filename = @"C:\TEMP\junk.txt";
if (!File.Exists(filename)) {
Console.WriteLine("No such file " + filename);
return;
}
/* Get the previous ACL, add a rule to give everyone read
* and write permission, and write back the resulting ACL. */
FileSecurity fileACLs = File.GetAccessControl(filename);
fileACLs.AddAccessRule(new FileSystemAccessRule(
// For everyone
new SecurityIdentifier (
WellKnownSidType.WorldSid,
null /* domain SID; ignored for Everyone */
),
// Allow read and write (of data and metadata),
// but not delete or execute
FileSystemRights.Read | FileSystemRights.Write,
AccessControlType.Allow
));
File.SetAccessControl(filename, fileACLs);
Console.WriteLine("Success!");
}
}
また、共有アプリケーションのデータディレクトリをどのように指定しているかについても心配しています。名前をハードコーディングしている場合C:\Documents and Settings\All Users\Application Data
、そのコードは英語以外のバージョンのWindows、またはVistaまたはWindows7では機能しません。SpecialFolder
列挙型を使用して、使用する適切なディレクトリを見つける方がよい場合があります。