C#应用程序可以';t在有限用户帐户XP中运行时,读取/写入管理员创建的文件

C#应用程序可以';t在有限用户帐户XP中运行时,读取/写入管理员创建的文件,c#,log4net,file-access,limited-user,C#,Log4net,File Access,Limited User,我有一个可供.NET(特别是C#)中所有用户(管理员或有限用户)使用的应用程序 当应用程序第一次启动时,它会在C:\Documents and Settings\All Users\Documents\中创建一些它需要的文件,以用于所有后续启动 如果XP中的受限用户是第一个启动应用程序的用户,那么它将创建文件,受限用户和管理员都可以正常运行 但是,如果管理员(或者我猜是其他受限用户)是第一个启动应用程序的人,那么受限用户将无法运行应用程序 如果由管理员创建,则无法读取/写入的两个文件是Log4N

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

当应用程序第一次启动时,它会在C:\Documents and Settings\All Users\Documents\中创建一些它需要的文件,以用于所有后续启动

如果XP中的受限用户是第一个启动应用程序的用户,那么它将创建文件,受限用户和管理员都可以正常运行

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

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

正在使用straitforward.NET文件.Copy(sourcepath,destinationpath)创建SQLite数据库文件。sourcepath是与应用程序一起安装的种子数据库文件,因此在第一次运行时,它会从C:\Program Files\app install\seed.db复制该文件

复制文件时,是否有方法设置文件的权限?可能是File.SetAccessControl()吗?我不清楚这是怎么回事

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


有什么想法吗?具有讽刺意味的是,这一切在具有有限/管理员帐户的Vista中运行得非常好-这只发生在具有管理员/有限帐户的XP中。

是的,这是SetAccessControl方法好的,有一个很好的例子 (来自satankidneypie的帖子)


祝你好运

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

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

为什么它在同一台电脑上的多个用户之间共享文件?这几乎从来都不是一个好的决定。为什么不根据需要将文件放在每个用户的appdata文件夹中呢?谢谢-这个链接正是我所需要的(特别是能够以独立于文化的方式获取“所有人”用户)