加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 写入Program Files文件夹

发布时间:2020-12-15 08:28:15 所属栏目:百科 来源:网络整理
导读:我的应用程序包括一个用于更新应用程序的自更新程序可执行文件. updater执行的第一个步骤之一是检查它是否具有对应用程序文件夹的写入权限 IPermission perm = new FileIOPermission(FileIOPermissionAccess.AllAccess,_localApplicationCodebase); if (!Sec
我的应用程序包括一个用于更新应用程序的自更新程序可执行文件.

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

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

if (!SecurityManager.IsGranted(perm))
        {
            OnProgressChanged("Security Permission Not Granted n The updater does not have read/write access to the application's files (" +
                              _localApplicationCodebase + ")",MessageTypes.Error);
            return false;
        }

        OnProgressChanged("Updater have read/write access to local application files at " + _localApplicationCodebase);
        return true;

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

据我所知,Vista / Win7 UAC阻止用户在程序文件文件夹中写入文件.但是,我不明白的是,如果实际上不允许,则授予许可

问候,

埃里克吉拉德

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读