Delphi 当我的EXE文件名包含单词“QUOTE”时,如何避免UAC;更新";?
我注意到以下现象: 使用Delphi 7构建的可执行文件,其部分名称包括“Update”(例如“UpdateMyApp.exe”)会导致UAC介入显示一条警告,如“是否允许程序对计算机进行更改” 这是通过一个简单的hello world应用程序实现的。在资源管理器中显示文件时,将显示叠加在应用程序图标上的屏蔽符号 一旦重命名exe,屏蔽就会消失,应用程序将在没有警告的情况下启动 如前所述,这种情况只发生在使用Delphi 7构建并在Windows 7上启动的程序上(我假设在Vista上也是如此),但在例如WinXP上不会发生 用Delphi2007快速检查一下,这个问题就解决了 好笑。。。吓人的Delphi 当我的EXE文件名包含单词“QUOTE”时,如何避免UAC;更新";?,delphi,uac,delphi-7,Delphi,Uac,Delphi 7,我注意到以下现象: 使用Delphi 7构建的可执行文件,其部分名称包括“Update”(例如“UpdateMyApp.exe”)会导致UAC介入显示一条警告,如“是否允许程序对计算机进行更改” 这是通过一个简单的hello world应用程序实现的。在资源管理器中显示文件时,将显示叠加在应用程序图标上的屏蔽符号 一旦重命名exe,屏蔽就会消失,应用程序将在没有警告的情况下启动 如前所述,这种情况只发生在使用Delphi 7构建并在Windows 7上启动的程序上(我假设在Vista上也是如此)
除了重命名文件,我还能做些什么来防止这种情况发生?这种行为是由于默认情况下使用Delphi 7生成的应用程序没有清单,或者没有属性。正因为如此,Windows认为当应用程序名称包含诸如
Setup
或Update
之类的词时,您需要管理员访问权限。这个过程被称为UAC,并与Windows Vista一起引入
从MSDN站点:
安装程序检测仅适用于:
- 文件名包括“安装”、“安装”、“更新”等关键字
- 以下版本控制资源字段中的关键字:供应商, 公司名称、产品名称、文件 说明,原始文件名, 内部名称和导出名称
- 可执行文件中嵌入的并排清单中的关键字
- 在可执行文件中链接的特定StringTable项中的关键字
- 可执行文件中链接的RC数据中的关键属性
- 可执行文件中的目标字节序列
requestedExecutionLevel
键包含清单
这是delphi 2007创建的manifiest示例。您可以看到此清单在内容中具有requestedExecutionLevel
属性
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="CodeGear RAD Studio"
version="11.0.2902.10471"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
这解释了它发生的原因,但没有解释如何解决它是的。包括你自己的清单。如果您使用的是Delphi 7,则必须使用.RC源文件将清单编译成.RES文件,并使用RC.exe进行编译,然后使用{$R MyManifest.RES}
-Delphi的更高版本,如XE和更高版本,在IDE中包括对选择您自己的.manifest文件的支持。我与Youda008有相同的问题。这个答案包含了创建、编译和包含清单文件的详细步骤。注意,我必须运行“brcc32uac.rc”命令;它没有为我自动编译。