【问题标题】:UAC thinks my Application is an installer Part 2UAC 认为我的应用程序是安装程序第 2 部分
【发布时间】:2011-06-12 01:37:26
【问题描述】:

我一直在尝试处理 Windows UAC 的“功能”,它会在应用程序中查找单词“setup”或“install”并自动认为它是安装程序。

我尝试按照in this stackoverflow question 的建议添加嵌入式清单,这解决了我在 Vista 和 7 上的问题,但破坏了我在 Server 2003 上的应用程序。

我还尝试了在其他几个网站上找到的一些修复程序。我发现on Microsoft's site 的一个建议是使用.config,而不是.exe.config。它工作得很好,但这不是一个选择,因为它违反了我们所有其他应用程序的约定。

另一个选项是将 assemblyIdentity 节点添加到 manfiest。我试过了,但无法让它工作。

下面是我现在的清单。有什么想法吗?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">  
    <application>
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates application support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application>
    <dependency>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
      </dependentAssembly>
    </dependency>
  </compatibility>
</assembly>

Note: This is a managed C# application. And the manifest has to be embedded into the executable.

谢谢,
皮特

【问题讨论】:

  • 为什么需要在非安装程序的名称中使用“setup”/“install”?
  • 是公司应用的名称。应用程序中的单词实际上是 Setups,但 UAC 仍然标记它。
  • 你能把这个词改成配置吗?
  • 我不确定您说“这个词”时指的是什么。如果您指的是应用程序名称,则不,我无法更改名称。我们的建筑师不会这样做。我正在寻找解决方案,而不是解决方法(我希望这听起来不粗鲁)。我可以更改应用程序代码并添加清单等,但我无法更改应用程序名称或配置文件名。

标签: installation windows-server-2003 uac manifest


【解决方案1】:

请参阅MSDN documentation,如果这在 Server 2003 上中断,您很可能错误地制作了清单。不幸的是,我只处理过本机代码的清单,所以我不确定从哪里开始 C#

安装程序检测技术

安装程序是应用程序 旨在部署软件,并且大多数 写入系统目录和 注册表项。这些受保护的系统 位置通常只能写 由管理员用户,这意味着 标准用户没有 足够的权限来安装程序。 Windows Vista 启发式检测 安装程序和请求 管理员凭据或批准 从管理员用户按顺序 以访问权限运行。视窗 Vista 还启发式地检测 更新程序和卸载程序。 请注意,UAC 的设计目标是 防止安装 在用户不知情的情况下执行 并同意,因为他们写信给 文件系统的保护区和 注册表。

安装程序检测仅适用于:

  1. 位可执行文件
  2. 没有请求执行级别的应用程序
  3. 以标准用户身份运行并启用 LUA 的交互式进程

在创建 32 位进程之前, 检查以下属性 来确定它是否是一个 安装程序:

  • 文件名包含“安装”、“设置”、“更新”等关键字。
  • 以下版本控制资源字段中的关键字:供应商、公司名称、产品名称、文件描述、原始文件名、内部名称和导出名称。
  • 嵌入在可执行文件中的并行清单中的关键字。
  • 可执行文件中链接的特定 StringTable 条目中的关键字。
  • 可执行文件中链接的 RC 数据中的关键属性。
  • 可执行文件中的目标字节序列。

【讨论】:

    【解决方案2】:

    您应该按照this article 中的说明将&lt;requestedExecutionLevel&gt; 元素添加到您的应用程序清单中(请参阅“使用Microsoft Visual Studio® 2005 为Windows XP 和Windows Vista 应用程序构建和嵌入清单”部分 ; 此方法在 Vista/7 和 XP/2003 服务器中都可以使用),并将其 level 属性设置为 asInvoker 值。

    因此,您将从this answer 中引用的安装程序检测算法中消除选项 2。

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2012-05-21
      • 2011-01-17
      相关资源
      最近更新 更多