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 Starter Edition,在某些情况下也不适用于其他 Windows 7 Edition。

异常消息 (IdentityNotMappedException) 是“无法翻译部分或全部身份引用”。似乎在这些计算机中找不到“每个人”用户,但我不确定。它发生在 System.Security.Principal.NTAAccount.Translate 方法中。

有什么帮助吗?

4

2 回答 2

2

这个问题前段时间来到了我们的开发团队。

您尚未指定 Windows 7 Starter Edition 的语言。我们意识到,在许多装有 Windows 7 Enterprise 或 Ultimate Edition 的机器中,这个问题从未发生过,但在英文 Starter Edition 中也没有。但是,在使用其他语言(例如西班牙语)时,我们可能会看到某些问题。

您是否尝试过从头开始安装英文版 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 版本中),内置帐户的名称仍为俄语。

我建议直接使用内置或Well-known SIDs。对于每个人,使用SECURITY_WORLD_SID_AUTHORITYSECURITY_WORLD_RID

不过,我无法为您提供有关如何使用 C# 的代码示例。

于 2012-10-27T18:52:46.440 回答