5

我的最后一个问题“列出 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 添加引用(uses 子句),该应用程序在 WinXP 上运行良好,但我的 .manifest 文件在 Vista 或 Win7 下没有区别。

4

4 回答 4

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 混合在一起,添加了依赖项部分。如果有人知道它为什么现在工作,我会很高兴听到 - 但这是这里的解决方案 - 迄今为止在几个虚拟机、我的计算机和其他几个虚拟机上进行了测试......工作:)

于 2010-04-06T23:51:10.493 回答
8

您需要使用代码签名证书对代码进行签名。这里应该有很多例子。我已经用“代码签名”重新标记了您的问题,您也可以查找“证书”。
我自己使用 Comodo 证书,并用很棒的、很棒的 Visual Build Pro v6 签署它们,这是 SO 上的广告商。

于 2010-04-06T21:12:36.567 回答
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>
于 2010-04-07T12:53:28.170 回答
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>
于 2011-11-15T22:09:17.657 回答