0

编辑:如果有人可以提供这个问题,我仍然希望得到答案,但是我决定将该项目的非管理部分拆分为另一个项目,该项目将根据需要调用该项目。

我有一个项目在 HKLM 下操作一些注册表项 - 这显然需要提升。应用程序知道它何时需要此提升,并将重新启动自身runas以获得提升。

在开发环境中,这可以正常工作,并且应用程序也可以在这种形式的预期目标上正常运行。

当我通过 VS2010 安装项目抽取项目并将项目安装到目标系统上时,EXE 被标记为需要提升,并在应用程序逻辑确定是否需要它之前运行时请求它。

我已经搜索了一个小时左右,但没有找到任何相关的内容,尽管我怀疑我的搜索词的力量不够强大(或者我缺乏正确的词)来找到合适的结果。

如何阻止安装项目将可执行文件标记为需要提升?


在下面的评论之后,我向项目添加了一个自定义清单,结果相同,清单对我来说看起来很正确:

<?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="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
    </application>
  </compatibility>
</asmv1:assembly>

这是项目构建的输出(在 obj 文件夹中,因为这是安装项目所提取的内容):

http://i.stack.imgur.com/elrQh.png

显而易见的事情是可执行文件上缺少 UAC 屏蔽。构建安装项目后,然后通过生成的 MSI 安装它,安装的可执行文件如下所示:

http://i.stack.imgur.com/A33qz.png

注意到现在存在的 UAC 屏蔽。

在添加自定义清单之前,它被设置为使用默认清单(我怀疑它具有相同的内容)。

4

0 回答 0