当前位置:  开发笔记 > 编程语言 > 正文

在受限用户帐户XP中运行时,C#应用程序无法读取/写入管理员创建的文件

如何解决《在受限用户帐户XP中运行时,C#应用程序无法读取/写入管理员创建的文件》经验,为你挑选了1个好方法。

我有一个可供.NET中所有用户(管理员或有限)使用的应用程序(特别是C#).

当应用程序首次启动时 - 它会在C:\ Documents and Settings\All Users\Documents \中为所有后续启动创建一些所需的文件.

如果XP中的受限用户是启动应用程序的第一个用户,则它可以很好地创建文件,并且受限用户和管理员都可以正常运行.

但是,如果管理员(或者我猜不同的有限用户)是第一个启动应用程序,那么受限用户将无法运行该应用程序.

如果由管理员创建,则无法读取/写入的两个文件是Log4Net日志文件和SQLite db文件.

正在使用straitforward .NET File.Copy(sourcepath,destinationpath)创建SQLite数据库文件.sourcepath是随应用程序一起安装的种子数据库文件 - 所以在第一次运行时它会复制来自C:\ Program Files\app install\seed.db的文件.

有没有办法在复制文件时设置文件的权限?File.SetAccessControl()也许吧?我不清楚它是如何工作的.

另一个问题是log4Net滚动文件追加器不会滚动旧文件并创建新文件,因为管理员用户在运行应用程序时创建了旧文件.

有任何想法吗?具有讽刺意味的是,这一切在Vista中使用有限/管理帐户完全正常 - 这只发生在XP中,具有管理员/有限帐户.



1> LukeH..:

我认为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);

注意:从文件中获取现有访问控制列表,然后将新规则添加到该列表中非常重要.如果您只是从头开始创建一个新的访问控制列表,那么它将完全覆盖现有的权限.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有