我一直在尝试处理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.
谢谢,
皮特
答案 0 :(得分:1)
参考MSDN documentation,如果在Server 2003上中断,你很可能错误地制作了清单。不幸的是我只处理了本机代码的清单,所以我不知道从哪里开始C#
安装程序检测技术
安装程序是应用程序 旨在部署软件,大多数 写入系统目录和 注册表项。这些保护系统 位置通常只能写入 由管理员用户,这意味着 标准用户没有 足够的安装程序访问权限。 Windows Vista启发式检测 安装程序和请求 管理员凭据或批准 从管理员用户按顺序 以访问权限运行。视窗 Vista还试探性地发现了 更新程序和卸载程序。 请注意,UAC的设计目标是 防止安装 在用户不知情的情况下执行 他们写信给他们的同意 文件系统的保护区域和 注册表中。
安装程序检测仅适用于:
- 位可执行文件
- 没有requestedExecutionLevel的应用程序
- 以启用LUA的标准用户身份运行的交互式进程
醇>在创建32位进程之前, 检查以下属性 确定它是否是一个 安装程序:
- 文件名包括“安装”,“设置”,“更新”等关键字
- 以下版本控制资源字段中的关键字:供应商,公司名称,产品名称,文件描述,原始文件名,内部名称和导出名称。
- 可执行文件中嵌入的并排清单中的关键字。
- 可执行文件中链接的特定StringTable条目中的关键字。
- 可执行文件中链接的RC数据中的关键属性。
- 可执行文件中的目标字节序列。
答案 1 :(得分:1)
您应该将<requestedExecutionLevel>
元素添加到应用程序清单中,如this article中所述(请参阅“使用MicrosoftVisualStudio®2005为Windows XP和Windows Vista应用程序构建和嵌入清单”一节) ;此方法适用于Vista / 7和XP / 2003服务器),并将其level
属性设置为asInvoker
值。
因此,您将从this answer中引用的安装程序检测算法中删除选项2。