我的上一个问题“在Win-7下列出服务和服务状态”使我开始研究一种解决方案,该解决方案基于.manifest文件为我的应用程序提供Windows Vista以后的管理员权限。
我不确定继续上一个问题,因为它们不一样所以这是另一个问题:
我的应用程序现在在Win 7下运行正常,无论我是否以管理员身份运行它,因为清单文件。 我的清单文件如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.6.0.5" processorArchitecture="X86" name="ServiceMonitorPro" type="win32"/>
<description publisher="Powershield Ltd" product="Powershield Service Monitor">Powershield Service Monitor</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
当应用程序在Windows 7或Vista上运行时,UAC会出现如下对话框: alt text http://www.freeimagehosting.net/uploads/39787fd3dd.jpg
如何更换“未知”发布商?
另一个也是最大的问题是,即使你的应用程序在Win7或Vista下运行没有问题,在WinXP下它现在崩溃了: “此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。”
我想补充的另一件事:如果 我向XPMan添加了引用(使用子句) 该应用程序在WinXP上工作正常,但随后 它我的.manifest文件没有 Vista或Win7下的差异。
答案 0 :(得分:12)
我要感谢大家,通过评论或回答指出我继续挖掘... :) 我去搜索WindowsXP.res文件。 该文件的内容是:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="DelphiApplication"
version="1.0.0.0"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
</assembly>
解决方案:我已将我的.manifest文件与添加依赖关系部分的WindowsXP.Res xml混合。 如果有人知道为什么它现在正在工作,我会很高兴听到 - 但这是解决方案 - 到目前为止测试了几个虚拟机,在我的计算机和其他几个......工作:)
答案 1 :(得分:8)
您需要使用代码签名证书对代码进行签名。这里应该有很多例子。我已经通过“代码签名”重新标记了您的问题,您还可以查找“证书” 我自己使用Comodo证书,并使用令人敬畏的,精彩的Visual Build Pro v6签名,这是一个广告客户。
答案 2 :(得分:3)
您也可以在清单中指明与各种Windows版本的兼容性。我知道有与Vista和Win7兼容的条目;不确定XP。
MSDN提供了有关清单兼容性部分的信息。这也可以从链接页面中获得帮助:
<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>
</compatibility>
答案 3 :(得分:1)
在较新版本的Delphi(我认为7及以上版本)中,您还需要确保在项目选项对话框中取消选中“使用运行时主题”选项,否则Delphi将自动链接到其自己的默认清单文件(即它如何启用“主题支持”),您将收到有关应用程序配置不正确的运行时错误,因为会有冲突的条目。
这是Delphi2007应用程序的完整清单文件,需要在Windows 7中以管理员模式运行,并且还包含“依赖”部分以启用运行时主题支持:
<?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="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>