我有一个可供.NET中所有用户(管理员或有限)使用的应用程序(特别是C#)。
当应用程序首次启动时 - 它会在C:\ Documents and Settings \ All Users \ Documents \中为所有后续启动创建一些所需的文件。
如果XP中的受限用户是第一个启动应用程序的用户,那么它可以很好地创建文件,并且受限用户和管理员都可以正常运行。
但是,如果管理员(或者我猜不同的有限用户)是第一个启动应用程序,那么受限用户将无法运行该应用程序。
如果由管理员创建,则无法读取/写入的两个文件是Log4Net日志文件和SQLite数据库文件。
正在使用straitforward .NET File.Copy(sourcepath,destinationpath)创建SQLite数据库文件。 sourcepath是随应用程序一起安装的种子数据库文件 - 所以在第一次运行时它会复制来自C:\ Program Files \ app install \ seed.db
复制文件时有没有办法设置文件的权限? File.SetAccessControl()也许吧?我不清楚它是如何工作的。
另一个问题是log4Net滚动文件追加程序不会滚动旧文件并创建新文件,因为管理员用户在运行应用程序时会创建旧文件。
有什么想法吗?具有讽刺意味的是,这一切在使用有限/管理员帐户的Vista中完全正常 - 这只发生在具有管理员/有限帐户的XP中。
答案 0 :(得分:6)
我认为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);
注意:从文件中获取现有的访问控制列表,然后将新规则添加到该列表中非常重要。如果您只是从头开始创建一个新的访问控制列表,那么它将完全覆盖现有的权限。
答案 1 :(得分:2)
是的,这是SetAccessControl方法,好的例子here (来自satankidneypie的帖子)
祝你好运