1

インストール時にファイルのアクセス制御を変更しようとしています。具体的には、Wix のカスタム アクションを使用しているため、管理者権限で実行されていると確信しています。

コードは次のとおりです。

   string pathVersioningDat = ConfigurationManager.GetPath("versioning.dat", true);
   FileSystemAccessRule rule = new FileSystemAccessRule("everyone", FileSystemRights.FullControl, AccessControlType.Allow);
   FileSecurity fSecurity = File.GetAccessControl(pathVersioningDat);
   fSecurity.SetAccessRule(rule);
   File.SetAccessControl(pathVersioningDat, fSecurity);

複数のコンピューターで動作することがわかっています。W7 スターター エディションでは機能せず、場合によっては他の Windows 7 エディションでも機能しません。

例外メッセージ (IdentityNotMappedException) は、「一部またはすべての ID 参照を変換できませんでした」です。これらのコンピューターには「全員」のユーザーが見つからないようですが、よくわかりません。System.Security.Principal.NTAAccount.Translate メソッドで発生します。

何か助けはありますか?

4

2 に答える 2

2

この問題は、以前に開発チームに発生しました。

Windows 7StarterEditionの言語を指定していません。Windows 7EnterpriseまたはUltimateEditionを搭載した多くのマシンでは、この問題は発生しませんでしたが、英語のStarterEditionでも発生しませんでした。ただし、他の言語(スペイン語など)を使用すると、特定の問題が発生する可能性があります。

Windows 7 Starterを英語で最初からインストールしてみましたか?(Windows 7 Starterでは、インストール後に言語を変更できないことに注意してください)。

編集:

将来この問題を回避したい場合は、次のソリューションを使用できます。

SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
string pathVersioningDat = ConfigurationManager.GetPath("versioning.dat", true);
FileSystemAccessRule rule = new FileSystemAccessRule(sid, FileSystemRights.FullControl, AccessControlType.Allow);
FileSecurity fSecurity = File.GetAccessControl(pathVersioningDat);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(pathVersioningDat, fSecurity);

WellKnownSidType .WorldSid値を使用すると、ターゲットオペレーティングシステムの初期言語について心配する必要はありません。

それが役に立ったかどうか教えてください。

于 2012-10-26T11:27:04.823 に答える
1

antiocol は正しいようです。

ロシア語版の Windows では、EveryoneはВсеと呼ばれます。これは Starter バージョンに限定されません。組み込みのアカウントとグループはすべてローカライズされています。後で言語を英語に変更しても (Ultimate エディションで)、ビルトイン アカウントの名前はロシア語のままです。

組み込みの SID またはWell-known SIDを直接使用することをお勧めします。Everyoneには、 とを使用SECURITY_WORLD_SID_AUTHORITYSECURITY_WORLD_RIDます。

ただし、C# の使用方法に関するコード サンプルを提供することはできません。

于 2012-10-27T18:52:46.440 に答える