gpt4 book ai didi

c# - 对 Program Files 文件夹的写入权限

转载 作者:太空狗 更新时间:2023-10-29 21:11:20 25 4
gpt4 key购买 nike

我的应用程序包含一个用于更新应用程序的自更新程序可执行文件。

更新程序执行的第一步是检查它是否具有对应用程序文件夹的写入权限


IPermission perm = new FileIOPermission(FileIOPermissionAccess.AllAccess, _localApplicationCodebase);



 if (!SecurityManager.IsGranted(perm))
{
OnProgressChanged("未授予安全权限\n更新程序没有对应用程序文件的读/写访问权限("+
_localApplicationCodebase + ")",MessageTypes.Error);
返回假;
}

OnProgressChanged("Updater 具有对本地应用程序文件的读/写权限"+ _localApplicationCodebase);
返回真;

在 Win7/Vista 下执行时,此代码通过(意味着根据 CAS,代码确实具有写访问权限),但是当我尝试写入文件时,我得到了拒绝访问(并且我确认文件不是使用中)

我了解到 Vista/Win7 UAC 阻止用户在程序文件文件夹中写入文件。但是,我不明白的是,如果实际上不是,为什么会授予权限

问候,

埃里克·吉拉德

PS :如果我使用“以管理员身份运行”运行相同的代码,它工作正常

最佳答案

了解 UAC 的重要一点是,默认情况下,没有代码以管理员权限运行,因此无法写入 Program Files 目录。即使您以管理员身份登录,应用程序也会以标准用户权限启动。

有两种解决方法。您可以让用户使用“以管理员身份运行”菜单项启动应用程序。但这依赖于用户记住一些东西。更好的是embed a manifest进入请求管理员权限的可执行文件。在 list 中,将 requestedExecutionLevel 设置为 requireAdministrator。这将导致 UAC 在应用启动后立即提示用户输入管理员凭据。

正如丹尼尔所说,最好的解决方案是将更新功能放在一个单独的应用程序中。您的主要应用程序将有一个 list ,它将 requestedExecutionLevel 设置为“asInvoker”,您的更新程序应用程序将请求“requireAdministrator”。您的主要应用程序可以以标准权限运行。但是当需要更新时,使用 Process.Start 启动更新应用程序,要求用户输入管理员凭据。

关于c# - 对 Program Files 文件夹的写入权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1715209/

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