UAC认为我的应用程序是安装程序第2部分

时间:2011-01-19 21:12:43

标签: installer windows-server-2003 uac manifest

我一直在尝试处理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.

谢谢,
皮特

2 个答案:

答案 0 :(得分:1)

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

  

安装程序检测技术

     

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

     

安装程序检测仅适用于:

     
      
  1. 位可执行文件
  2.   
  3. 没有requestedExecutionLevel的应用程序
  4.   
  5. 以启用LUA的标准用户身份运行的交互式进程
  6.         

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

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

答案 1 :(得分:1)

您应该将<requestedExecutionLevel>元素添加到应用程序清单中,如this article中所述(请参阅“使用MicrosoftVisualStudio®2005为Windows XP和Windows Vista应用程序构建和嵌入清单”一节) ;此方法适用于Vista / 7和XP / 2003服务器),并将其level属性设置为asInvoker值。

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