C# ClickOnce不支持请求执行级别"requireAdministrator"

本文介绍如何通过修改app.manifest文件中的requestedExecutionLevel来避免ClickOnce安全设置被重置,详细步骤包括定位manifest文件并调整权限级别,以确保应用程序的正确运行和兼容性。

搜索这个问题时,出现的解决方案为:

【解决方案资源管理器】属性的【安全性】选项卡,取消【启用ClickOnce安全设置】

但是这样做在重新发布时仍然会被重新勾选,我的解决方案为:

在入口程序下的properties目录中,有app.manifest,右键使用记事本打开或者notepad++之类的编辑器,找到requestedExecutionLevel,变更为:

        <!-- UAC 清单选项
            如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换 
            requestedExecutionLevel 节点。

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

            指定 requestedExecutionLevel 节点将会禁用文件和注册表虚拟化。
            如果要利用文件和注册表虚拟化实现向后 
            兼容性,则删除 requestedExecutionLevel 节点。
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />

看注释其实也就知道怎么修改了

C#项目中,`app.manifest` 文件用于定义应用程序的运行时行为,其中包括程序启动时的执行权限级别。通过配置 `requestedExecutionLevel` 标签,可以指定应用程序以何种权限级别运行。以下是详细的配置方式: ### 配置 requestedExecutionLevel 的使用方法 `requestedExecutionLevel` 有三个可选值: - **asInvoker**:应用程序以调用者(即当前用户)的身份运行,不会尝试提升权限。 - **requireAdministrator**:应用程序必须以管理员身份运行。如果当前用户不是管理员,则会触发 UAC(用户账户控制)提示请求权限提升[^1]。 - **highestAvailable**:应用程序将以当前用户所能获得的最高权限运行。如果当前用户是管理员或具有管理员权限,则程序将以管理员身份运行;否则,以普通用户身份运行。 #### 修改 app.manifest 文件步骤: 1. 在 Visual Studio 中,右键点击项目,选择“添加” -> “新建项”。 2. 在弹出窗口中选择“应用程序清单文件”,点击“添加”按钮。 3. 添加后,项目中将出现一个名为 `app.manifest` 的 XML 文件。双击打开该文件进行编辑。 4. 找到如下代码行: ```xml <requestedExecutionLevel level="asInvoker" uiAccess="false" /> ``` 5. 将 `level` 属性更改为所需的权限级别,例如: - 若要设置为管理员权限运行: ```xml <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> ``` - 若要设置为以当前用户的最大可用权限运行: ```xml <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> ``` #### 注意事项: - 如果项目启用了 **ClickOnce** 发布机制,并尝试将 `requestedExecutionLevel` 设置为 `requireAdministrator`,则会遇到错误提示:“ClickOnce 不支持请求执行级别requireAdministrator’”[^2]。 - 这种限制意味着如果需要以管理员身份运行的应用程序使用了 ClickOnce 部署模型,则必须更改部署策略或避免使用 `requireAdministrator` 权限设置[^3]。 ### 示例代码段 以下是一个完整的 `app.manifest` 文件片段,展示如何配置不同权限级别: ```xml <?xml version="1.0" encoding="utf-8"?> <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <!-- 可选值: asInvoker, requireAdministrator, highestAvailable --> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> </security> </trustInfo> </assembly> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值