代码之家  ›  专栏  ›  技术社区  ›  ronaldosantana

winxp和win7下的delphi应用程序清单文件问题

  •  5
  • ronaldosantana  · 技术社区  · 16 年前

    我的最后一个问题“列出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 回复  |  直到 11 年前
        1
  •  12
  •   ronaldosantana    16 年前

    我要感谢所有人,他们的评论或回答让我继续挖掘…:) 我去搜索文件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文件,其中添加了 附属国 部分。 如果有人知道为什么它现在工作,我很高兴听到-但这是这里的解决方案-测试到目前为止在两个虚拟机,在我的电脑和其他一些…工作:

        2
  •  8
  •   Chris Thornton    16 年前

    您需要使用代码签名证书对代码进行签名。这里应该有很多例子。我用“代码签名”重新标记了您的问题,您还可以查找“证书”。
    我自己用的是comodo证书,然后用很棒的visual build pro v6签了名,它是这里的一个广告商。

        3
  •  3
  •   Ken White    16 年前

    您还可以在清单中指示与不同版本的窗口的兼容性。我知道有一些与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>
    
        4
  •  1
  •   ByteArts    14 年前

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