manifest / C++ Builder 10.2



  • Hallo,
    kennt sich jemand mit dem Thema "mainfest" aus?
    Ich habe mehrere Pojekte bei denen ich per GetVersionEx() die OS-Version ermittle.
    Mit Ausnahme von einem Projekt funktioniert das bei allen anderen Projekten und bei allen Windows-Versionen tadellos.
    Nur bei einem Projekt bringt GetVersionEx() - egal auf welchem Betriebsystem es läuft - immer 6.2.9200 (entspricht Windows 8.0).
    Meine bisherige Recherche ergab, dass es mit dem "manifest" zusammenhängen muss (Projekt => Optionen => Anwendung => Manifest). Egal, was ich hier auch einstelle, der manifest-Code ob "Automatisch erzeugt" oder "Benutzerdefiniert" wird bei diesem Projekt nicht in die EXE eingefügt. Bei den anderen Projekten klappt das problemlos.
    Alle Projekteinstellungen sind identisch mit anderen Projekten und denoch muss es irgenwo noch einen Unterschied geben.
    Falls jemand eine Idee hat, ich bin für jeden Tipp dankbar.

    Zum besseren Verständnis, es geht um diesen Code, der in die Exe eingebunden wird:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
      <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="asInvoker"
              uiAccess="false"
            />
          </requestedPrivileges>
        </security>
      </trustInfo>
      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
          <!-- Windows 10 -->
          <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
          <!-- Windows 8.1 -->
          <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
          <!-- Windows Vista -->
          <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
          <!-- Windows 7 -->
          <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
          <!-- Windows 8 -->
          <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
        </application>
      </compatibility>
    </assembly>
    


  • Hast du mal direkt die Projektdateien (.bpr) im Texteditor verglichen?



  • @Th69 sagte in manifest / C++ Builder 10.2:

    Hast du mal direkt die Projektdateien (.dpr) im Texteditor verglichen?

    Ja, das war mein erster Weg, nachdem die Änderungen in den Pojektoptionen keine Auswirkung zeigten.
    Und hier scheint alles, was auf den ersten Blick mit "manifest" zusammenhängt, identisch zu sein.



  • Fehlt das Manifest wirklich in der Anwendung? Überprüfe mal mit einer der Methoden aus Reading an applications manifest file?

    Wofür rufst du denn GetVersionEx auf (evtl. lies mal die Hinweise dort)?



  • @Th69 sagte in manifest / C++ Builder 10.2:

    Fehlt das Manifest wirklich in der Anwendung? Überprüfe mal mit einer der Methoden aus Reading an applications manifest file?

    Wofür rufst du denn GetVersionEx auf (evtl. lies mal die Hinweise dort)?

    Das Manifest fehlt wirklich, man kann es mit einem einfachen Texteditor (z.B. Notepad++) prüfen. Die diversen Posts in den verschiedenen newsgroups habe ich auch schon alle durch.
    Ich brauche GetVersionEx() um festzustellen, auf welchem Betriebsystem die Software läuft (Windows10/11 oder Server).
    Die Hinweise zu GetVersionEx() habe ich auch schon gelesen und diverses ausprobiert und auch die Funktionen in versionhelpers.h (z.B. IsWindows10OrGreater) funktionieren nur bis Windows 8.



  • Dann solltest du das Projekt nochmal in einem neuen Ordner erzeugen (ich nehme mal an, du hast einen kompletten Clean+Rebuild schon versucht?).

    Da GetVersionEx veraltet ist (also nicht mehr aufgerufen werden sollte), solltest du, wie in Betriebssystemversion geschrieben, auf einzelne Betriebssystemfeature testen, z.B. IsOS(OS_SERVER).



  • @Th69 sagte in manifest / C++ Builder 10.2:

    Dann solltest du das Projekt nochmal in einem neuen Ordner erzeugen (ich nehme mal an, du hast einen kompletten Clean+Rebuild schon versucht?).

    Da GetVersionEx veraltet ist (also nicht mehr aufgerufen werden sollte), solltest du, wie in Betriebssystemversion geschrieben, auf einzelne Betriebssystemfeature testen, z.B. IsOS(OS_SERVER).

    Das habe ich alles schon mehrmals rauf und runter durchprobiert, ohne Erfolg.
    Letztendlich stosse ich immer wieder auf das manifest, das (nur) bei diesem Projekt - egal, wie ich die Projektoptionen einstelle - nicht in die EXE gelinkt wird. Bei all meinen anderen Projekten funktioniert das problemlos.
    Wenn manifest nicht in die EXE gelinkt wird, dann funktioniert auch IsOS() nicht.


Anmelden zum Antworten