我有一个可供所有用户(管理员或受限用户)在 .NET(特别是 C#)中使用的应用程序。
当应用程序首次启动时 - 它会在 C:\Documents and Settings\All Users\Documents\ 中创建一些后续启动所需的文件。
如果 XP 中的受限用户是第一个启动该应用程序的用户,那么它会正常创建文件,并且受限用户和管理员都可以正常运行。
但是,如果管理员(或者我猜是另一个受限用户)是第一个启动该应用程序的人,那么该受限用户将无法运行该应用程序。
如果由管理员创建,则无法读取/写入的两个文件是 Log4Net 日志文件和 SQLite 数据库文件。
SQLite 数据库文件是使用直接的 .NET File.Copy(sourcepath,destinationpath) 创建的。源路径是与应用程序一起安装的种子数据库文件 - 因此首次运行时它会从 C:\Program Files\app install\seed.db 复制该文件
有没有办法在复制文件时设置文件的权限?也许是 File.SetAccessControl() ?我不清楚这是如何运作的。
另一个问题是 log4Net 滚动文件附加程序不会滚动旧文件并创建新文件,因为旧文件是由管理员用户在运行应用程序时创建的。
有任何想法吗?讽刺的是,这一切在具有有限/管理员帐户的 Vista 中运行得非常好 - 这仅发生在具有管理员/有限帐户的 XP 中。
I think SetAccessControl
是要走的路。也许是这样的:
// get the existing access controls
FileSecurity fs = File.GetAccessControl(yourFilename);
// add the new rule to the existing settings
fs.AddAccessRule(new FileSystemAccessRule(
@"DOMAIN\Users", // or "BUILTIN\Users", "COMPUTER\AccountName" etc
FileSystemRights.Modify,
AccessControlType.Allow));
// set the updated access controls
File.SetAccessControl(yourFilename, fs);
注意:从文件中获取现有的访问控制列表,然后将新规则添加到该列表中,这一点很重要。如果您只是从头开始创建一个新的访问控制列表,那么它将完全覆盖现有的权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)