永久提升exe的权限

时间:2014-04-17 17:39:47

标签: c# wix

我已经使用wix为我的应用程序构建了一个安装程序。我也在使用自动更新程序,因此用户可以更新软件。我遇到的问题是更新程序工作它需要运行其exe并关闭我的应用程序并在完成后重新启动我的应用程序。更新程序启动时,需要提升权限才能运行。我想知道是否有一种方法可以永久授予updater exe提升的安装权限,因为它必须由管理员安装才能开始,每次需要更新时都不会让管理员出现?

用户点击更新会很好,而不必费心去IT部门获取我们软件的更新版本。

2 个答案:

答案 0 :(得分:1)

如果不是the windows build team的成员,您只有两个选项

  1. 从另一个已经运行且具有管理员权限的程序启动您的程序
  2. 使其更新过程不需要管理员权限。
  3. 执行#1的唯一真正方法是拥有一个在后台运行的Windows服务并以管理用户身份执行下载的更新包,这个过程很难做到“正确”而不会在最终用户中留下安全漏洞恶意软件(或想要绕过IT限制的用户)可以利用的系统。

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

答案 1 :(得分:0)

您需要为每个始终需要运行提升的可执行文件添加清单。以下是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帐户仍然需要管理权限才能使进程以这些权限运行。