2011-01-19 32 views
2

我一直在试图处理Windows UAC的'功能',它在应用程序中查找'setup'或'install'字样,并自动相信它是安装程序。UAC认为我的应用程序是安装程序第2部分

我尝试添加一个嵌入的清单,如建议in this stackoverflow question,并能解决我的Vista和Windows 7的问题,而是打破服务器上我的应用程序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.

感谢,
皮特

+0

为什么你需要在不是安装程序的名称中使用“setup”/“install”? – 2011-01-19 21:15:47

回答

1

请参考MSDN documentation,你很可能已经制作清单错误,如果这打破Server 2003的不幸的是,我永远只处理了体现为本机代码,所以我不知道从哪里开始C#

个安装程序检测技术

安装程序设计来部署应用软件 ,最 写入到系统目录和 注册表项。这些受保护的系统 位置通常由管理员用户只能写入 ,这意味着 标准用户没有足够的安装程序访问权限。 Windows Vista启发式检测到 安装程序和请求 管理员凭证或 来自管理员用户的请求 以访问权限运行。 Windows Vista还启发式检测到 更新程序和卸载程序。 请注意,UAC的设计目标是 防止安装从 执行,而用户不知道 和同意,因为他们写入 保护区域的文件系统和 注册表。

安装程序检测仅适用于:

  1. 位可执行文件
  2. 应用没有requestedExecutionLevel
  3. 运行与LUA标准用户启用

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

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

this article描述您应该添加<requestedExecutionLevel>元素添加到应用程序清单(见“构建和嵌入一个与Microsoft Visual 2005工作室为Windows XP和Windows Vista的应用程序清单”,这种方法将在Vista/7和XP/2003服务器上都可以工作),并将其level属性设置为asInvoker的值。

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

相关问题