gpt4 book ai didi

c# - 如何在较低的执行级别运行部分代码

转载 作者:太空狗 更新时间:2023-10-30 01:18:11 26 4
gpt4 key购买 nike

我用 C# 开发了一个控制台应用程序,它需要以管理员身份运行(某些调用 sqllocaldb.exe 和 sqlcmd.exe 需要),所以我的 app.manifest 有这一行:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

有时我会创建一个目录

Directory.CreateDirectory("mypath");

然后复制一些我稍后在 SqlCmd 中用于创建数据库的 .mdf 文件。我的问题是,由于目录是以管理员身份创建的,所以我复制的文件的写访问权限受到限制,因此在 sqlserver 中引发异常: 无法升级数据库 [Database_Name],因为它是只读的或具有只读文件

是否可以以简单用户身份运行创建目录/复制文件的代码部分?
或者
我可以专门创建没有 protected 访问权限的目录吗?

注意:我查看了 DirectorySecurity/FileSecurity 的内容,但是 FileSystemAccessRule 构造函数需要将帐户名作为字符串传递,问题:我不知道我的用户的帐户名/组名.所以我可以使用“Everyone”,但是如果我的用户系统设置为法语(就像我一样)或德语怎么办?

最佳答案

不了解文化也可以这样设置“Everyone”。

var sec = Directory.GetAccessControl(path);
var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
Directory.SetAccessControl(path, sec);

关于c# - 如何在较低的执行级别运行部分代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347714/

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