gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:56:26 25 4
gpt4 key购买 nike

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

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

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

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

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

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

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

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

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

最佳答案

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

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

关于在受限用户帐户 XP 中运行时,C# 应用程序无法读取/写入管理员创建的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/534877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com