永久提升exe的权限

本文关键字:权限 exe | 更新日期: 2023-09-27 17:58:59

我已经用wix为我的应用程序构建了一个安装程序。我还使用了一个自动更新程序,这样用户就可以更新软件了。我遇到的问题是,为了让更新程序正常工作,它需要运行它的exe并关闭我的应用程序,然后在完成后重新启动应用程序。当更新程序启动时,它需要提升权限才能运行。我想知道是否有一种方法可以在安装时永久授予updater exe提升的权限,因为它必须首先由管理员安装,从而避免每次需要进行更新时管理员都在场?

对于用户来说,点击更新将是一件好事,而不必麻烦他们的It部门来获得我们软件的更新版本。

永久提升exe的权限

如果不是windows构建团队的成员,您只有两个选项

  1. 从另一个已在运行且具有管理员权限的程序启动程序
  2. 确保您的更新过程不需要管理权限

执行#1的唯一真正方法是让一个windows服务在后台运行,并作为管理用户执行下载的更新包,如果不在最终用户系统中留下恶意软件(或希望绕过IT限制的用户)可能利用的安全漏洞,这个过程很难"正确"完成。

选项#2是更好的选项,也是许多流行软件包使用的选项。实现这一点的方法是更改ProgramFiles中文件夹的权限,以允许Authenticated Users组具有写入权限。这不是最佳解决方案,但可能是最容易实现的。另一种实现这一点的方法是将可更新资源安装到用户默认情况下可以写入访问的文件夹中,例如%LocalAppData%文件夹(我认为Chrome就是这样做的)和任何使用ClickOnce部署的应用程序)

您需要为始终需要提升运行的每个可执行文件添加一个清单。以下是一个示例app.manifest文件:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplicationName" />
  <description>My application description.</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>      
      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
    </application>
  </compatibility>
</asmv1:assembly>

清单中的相关设置为:

level="requireAdministrator"

您只需要向项目中添加一个app.manifest文件,然后将项目的"属性"选项卡中的清单设置为新文件,而不是使用编译器生成的默认清单。

运行进程的Windows帐户仍然需要管理权限,但是进程要使用这些权限运行。