2010-04-06 75 views
5

我的最后一个问题“的Win7下列表服务和服务状态”下的应用程序清单文件的问题使我开始寻找解决方案,让我的应用程序工作在Windows Vista下的管理权限以后根据.manifest的文件。德尔福的WinXP和Win7

我不知道关于继续与这件事情对前一个问题,因为他们没有那么这里同样是另一个问题:

我的应用程序现在能正常工作的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

我怎么能代替“不明”出版商?

其他和bigest问题是,即使你的应用程序与Win7的或Vista下没有问题的运行,在WinXP下它现在与消息崩溃: “此应用程序未能启动,因为应用程序配置不正确,重新安装该应用程序可能会解决这个问题。“

另一件事我想补充:如果 我添加引用(使用条款)来XPMan 应用程序工作在WinXP正常,但随后 是我.manifest的文件是没有 在Vista或Win7的性差异。

回答

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一个加入依赖部分。 如果有人知道为什么它现在的工作,我会很高兴听到 - 但这是这里的解决方案 - 在几个虚拟机的测试通过为止,我的电脑和其他几个... :)工作

+0

太棒了!感谢您在这里发布解决方案。我认为如果它得到了足够的支持,那么就有一个很好的徽章。 – 2010-04-07 00:38:02

8

你需要用代码签名证书签名的代码。这里应该有很多例子。我已用“代码签名”重新标记了您的问题,您也可以查找“证书”。
我用的Comodo证书自己,并与真棒,精彩,视觉构建Pro的V6发动机,这是广告客户在这里SO签字。

+0

嗨,OK - 将检查这,谢谢 - 任何想法与其他问题? – ronaldosantana 2010-04-06 21:15:18

+0

对不起,还没有看到其他的。 – 2010-04-06 22:03:58

+1

@Ronaldo:另一个错误信息与所谓的“并排配置”有关。简单来说,它期望找到一些运行时库,但不能。对于使用最近的编译器构建的VC++应用程序来说,它经常被看到。但是,这通常不会成为Delphi应用程序的问题。你是否依赖于某些外部DLL?你有没有检查过它们是否真的在XP上可用,或者它们是否需要单独安装?如果需要安装它们,你是否真的记得安装它们? (嘿,你永远不知道...) – 2010-04-06 22:09:48

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> 
1

在德尔福(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>