Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Vista und XP Manifest vereinigen (https://www.delphipraxis.net/94199-vista-und-xp-manifest-vereinigen.html)

Luckie 18. Jun 2007 00:42


Vista und XP Manifest vereinigen
 
Ich habe zum einm das XP Manifest:
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="6.0.0.0" processorArchitecture="X86" name="MyApp" type="win32" />
<description>Message Sender</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>
Und zum anderen das Vista Manifest, um für mein Programm beim Start gleich administrative Rechte anzufordern (Das ist doch das richtige oder?):
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="VistaLogonCustomizer.exe" type="*"/>
  <description>elevate execution level</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
   <security>
     <requestedPrivileges>
      <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
     </requestedPrivileges>
   </security>
  </trustInfo>
  <dependency>
   <dependentAssembly>
     <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
   </dependentAssembly>
  </dependency>
</assembly>
Aber wie sieht jetzt das jetzt zusammen aus? An welcher Stelle im XP-Manifest muss ich welchen Teil des Vista-Manifestes einfügen?

holliesoft 18. Jun 2007 05:26

Re: Vista und XP Manifest vereinigen
 
Hi Luckie,

wenn ich das richtig erkenne, dann verweist auch Dein Vista Manifest bereits auf die Common Controls-Version, die für die Darstellung der Controls im WinXP/Vista-Design zuständig ist:

XML-Code:
<dependentAssembly>
     <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
Da musst Du nichts vereinen, es ist bereits im Vista-Manifest beides komplett :-)

Gruß
Patrick

MathiasSimmack 18. Jun 2007 06:30

Re: Vista und XP Manifest vereinigen
 
Die Beispiele von Microsoft aus dem Windows SDK zeigen den <trustinfo>-Teil (für Vista) immer nach <description> und vor dem abschließenden </assembly>-root-Knoten.
Wenn nicht gerade der Aufbau der XML-Datei per Schema geprüft wird, und wenn dabei nicht auf eine bestimmte Reihenfolge Wert gelegt wird, dann sollte dein zweites Beispiel, @Micha, auch richtig sein.

turboPASCAL 18. Jun 2007 07:09

Re: Vista und XP Manifest vereinigen
 
So ist es.

Das Manifest für Vista ist auch für XP gültig. Der Abschnitt ( <trustInfo ...> </trustInfo> )
ist für XP uninteressant.

Hier noch ein Vista (& XP) Manifest:
XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
   xmlns="urn:schemas-microsoft-com:asm.v1"
   manifestVersion="1.0">
   <assemblyIdentity
      processorArchitecture="x86"
      version="5.6.0.0"

     
      type="win32"
      name="XPUsermanager.exe"/>
      <description>Windows XP & Vista Usergroup Control Center</description>

      <dependency>
      <dependentAssembly>
      <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         publicKeyToken="6595b64144ccf1df"
         language="*"
         processorArchitecture="x86"/>
    </dependentAssembly>
    </dependency>

   
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel
            level="requireAdministrator"
            uiAccess="false"/>
          </requestedPrivileges>
         </security>
    </trustInfo>

</assembly>

// Edit:

:gruebel: Ist noch keiner auf die Idee gegommen ein Manifest-Generator Tool zu schreiben ?

MathiasSimmack 18. Jun 2007 07:15

Re: Vista und XP Manifest vereinigen
 
Zitat:

Zitat von turboPASCAL
:gruebel: Ist noch keiner auf die Idee gegommen ein Manifest-Generator Tool zu schreiben ?

Doch, Novell z.B. Das Ding ist allerdings so rabiat, dass das Manifest gleich in der Exe abgelegt wird. :roll:

Helmi 18. Jun 2007 07:26

Re: Vista und XP Manifest vereinigen
 
Hallo,

ich find es sehr interessant ein Manifest zu haben, das für XP und Vista ist.

Kann mir einer verraten, wie man daraus eine komponente macht, wie das TXPMan in Delphi7?

CCRDude 18. Jun 2007 07:44

Re: Vista und XP Manifest vereinigen
 
Naja, so ein Manifest-Generator ist so simpel, daß ihn sich wahrscheinlich jeder selberbastelt ;)
Allgemein bin ich dazu übergegangen, alle Resourcen (auch Icon und Versionsinfos - letztere erlaubt die IDE ja leider nur monolingual, der entsprechende QC-Eintrag wird auch nur regelmässig auf "Next Rel" verschoben) mit einem externen Tool zusammenzubauen. Das kompiliert und codesigniert dann auch gleich, denn vor Delphi 2007 gab es ja noch keine direkte After-Compile-Möglichkeiten innerhalb der IDE.

Übrigens ein Unterschied zwischen den beiden oben angezeigten: trustInfo ist einmal v2 und einmal v3. Die Unterschiede habe ich noch nirgendwo erklärt gefunden; Certified for Vista spezifiert nicht näher, was benötigt wird, aber InstallShield Enterprise erwartet zwingend v3. Keine Ahnung wieso, aber da v3 scheinbar auch nicht schadet, würde ich empfehlen das zu verwenden.

Eine Komponente daraus machen, dürfte schwer möglich sein. Der Knackpunkt ist ja, daß schon XPMan eigentlich etwas zu "dumm" ist und als Programmnamen immer "Delphi Application" anzeigt. Scheinbar funktioniert der XPManager nur darüber, daß eine irgendwas.res mit Standard-Manifest eingebunden wird. Unter Vista gibt es jetzt drei Berechtigungsstufen, plus UI-Switch, d.h. selbst wenn man den Namen weglässt, bräuchte man für 6 Situationen 6 verschiedene Komponenten in 6 verschiedenen Units, und wär dann noch "unschön" anonym, und inkompatibel zu Delphi 2007 (was aber eh sehr halbgar ist, s.u.).

Ich hatte da mal ins QC einen entsprechenden Eintrag geschrieben. Der ist auch als "in 2007 gefixt" markiert. Der "Fix" sieht allerdings nur so aus, als daß eine Standardberechtigungsstufe vorgegeben wird, d.h. es ist weiterhin ein festes Manifest, nur jetzt über die Projekteinstellungen statt über eine Komponente wählbar.

Edith hat diesen Link gefunden:
Report No: 37448 (RAID: unavailable) Status: Closed
Current XPManifest is incompatible to "Certified for Vista" program
http://qc.codegear.com/wc/qcmain.aspx?d=37448

Bernhard Geyer 18. Jun 2007 07:50

Re: Vista und XP Manifest vereinigen
 
"Einfache" Komponente wird nicht möglich sein. Hier müßte der Compiler abhängig von Projekteinstellungen ein Manifest dynamisch generieren müssen. Wieso das man das nicht in den D2007-Compiler (der ja für Vista entwickelt wurde) gleich ergänzt hat ist m.E. komisch.

Habs bei uns über mehrer Res-Dateien gelößt die per Compiler-Switch ausgewählt werden. Als App-Name etwas unverfängliches genommen (Als Anwendungs-Name hat man ja noch die Infos in den "normalen" Versionsinfos).

turboPASCAL 18. Jun 2007 08:39

Re: Vista und XP Manifest vereinigen
 
Zitat:

Zitat von MathiasSimmack
Zitat:

Zitat von turboPASCAL
:gruebel: Ist noch keiner auf die Idee gegommen ein Manifest-Generator Tool zu schreiben ?

Doch, Novell z.B. Das Ding ist allerdings so rabiat, dass das Manifest gleich in der Exe abgelegt wird. :roll:

Äh, ja. Das Teil ist aber nur eine GUI für das Microsoft Manifest Tool (MT.exe) was im SDK
enthalten ist. ;) Was man so alles findet beim suchen... ;)

Luckie 18. Jun 2007 09:20

Re: Vista und XP Manifest vereinigen
 
Zitat:

Zitat von holliesoft
Hi Luckie,

wenn ich das richtig erkenne, dann verweist auch Dein Vista Manifest bereits auf die Common Controls-Version, die für die Darstellung der Controls im WinXP/Vista-Design zuständig ist:

XML-Code:
<dependentAssembly>
     <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*"/>
Da musst Du nichts vereinen, es ist bereits im Vista-Manifest beides komplett :-)

Dann hab eich das gestern Nacht übersehen.

Aber ist das richtig, wenn ich unter Vista erzwingen will, dass mein Programm Administratorenrechte beim Start anfordert:
XML-Code:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz