Discussion:
CheckWin32Version(6,0)
(zu alt für eine Antwort)
Helmuth J.H. Adolph
2018-05-13 22:07:35 UTC
Permalink
Hallo,
die Funktion CheckWin32Version(6,0) soll TRUE zurückgeben wenn das
Programm auf einem Rechner mit einer Windowsversion ab Vista läuft.

Das tut sie auch, außer das Programm heißt Setup.exe. Das Programm
läuft dann automatisch im XP-Kompatibilitätsmodus und es wird FALSE
zurückgegeben. Das läßt sich auch nicht abschalten.

Kopiere ich das Programm auf einen USB-Stick, läuft es nicht im
XP-Kompatibilitätsmodus.

Irgendeine Idee wie man den Kompatibilitätsmodus ausschalten kann?
Grüße - Helmuth
Stefan M. Huber
2018-05-14 06:15:21 UTC
Permalink
Post by Helmuth J.H. Adolph
Hallo,
die Funktion CheckWin32Version(6,0) soll TRUE zurückgeben wenn das
Programm auf einem Rechner mit einer Windowsversion ab Vista läuft.
Das tut sie auch, außer das Programm heißt Setup.exe. Das Programm
läuft dann automatisch im XP-Kompatibilitätsmodus und es wird FALSE
zurückgegeben. Das läßt sich auch nicht abschalten.
Kopiere ich das Programm auf einen USB-Stick, läuft es nicht im
XP-Kompatibilitätsmodus.
Irgendeine Idee wie man den Kompatibilitätsmodus ausschalten kann?
Nicht konkret in diesem Fall, aber ich erinnere mich an Geschichten mit
der Manifest-Datei. Evtl. musst du bestimmte Informationen dort
aufnehmen, damit dein Programm einfach so gestartet wird.

Stefan
Matthias Hanft
2018-05-14 07:53:26 UTC
Permalink
Post by Stefan M. Huber
Nicht konkret in diesem Fall, aber ich erinnere mich an Geschichten mit
der Manifest-Datei. Evtl. musst du bestimmte Informationen dort
aufnehmen, damit dein Programm einfach so gestartet wird.
Man muss vor allem Informationen darin aufnehmen, die besagen "ich kenne
mich mit Windows-Versionen größer als Vista aus", sonst kriegt man *nie*
gemeldet, dass z.B. gerade Windows 10 läuft. Oder so ähnlich. Diese Win-
dows-Versions-Erkennung ist ein riesiger, kaum durchblickbarer Sumpf...

Ich habe bei mir eine "manifest.rc" ins Projekt eingebunden, mit folgendem
Inhalt:

1 24 "manifest.xml"

und die dazugehörige "manifest.xml" steht unten (die Felder mit "xxx"
noch anpassen). Damit werden alle Windows-Versionen erkannt und das
Programm läuft so, wie man es sich denkt :-)

Gruß Matthias.

--- schnipp ---

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
name="xxxAuthorNamexxx.xxxProgramNamexxx"
processorArchitecture="x86"
version="1.2.3.4"
type="win32" />

<description>xxx Beschreibung des Programms xxx</description>

<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="AsInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>

<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 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}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>

<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
</assembly>
Helmuth J.H. Adolph
2018-05-14 10:16:34 UTC
Permalink
Hallo,
hat leider nichts genützt.
Ich habe aber jetzt das Problem gefunden:
Für das Programm war wohl mal der Kompatibilitätsmodus für XP
eingeschaltet. Wenn man dann neu kompiliert, wird die EXE
überschrieben, der Kompatibilitätsmodus bleibt aber eingeschaltet
und lässt sich nicht mehr löschen.
Über Eigenschaften/Kompatibilität/Eigenschaften für alle Benutzer ändern
läßt sich das Häkchen löschen. Ab da sind die Neukompilierungen dann
auch ohne Kompatibilitätsmodus.
Gruß - Helmuth
Post by Matthias Hanft
Post by Stefan M. Huber
Nicht konkret in diesem Fall, aber ich erinnere mich an Geschichten mit
der Manifest-Datei. Evtl. musst du bestimmte Informationen dort
aufnehmen, damit dein Programm einfach so gestartet wird.
Man muss vor allem Informationen darin aufnehmen, die besagen "ich kenne
mich mit Windows-Versionen größer als Vista aus", sonst kriegt man *nie*
gemeldet, dass z.B. gerade Windows 10 läuft. Oder so ähnlich. Diese Win-
dows-Versions-Erkennung ist ein riesiger, kaum durchblickbarer Sumpf...
Ich habe bei mir eine "manifest.rc" ins Projekt eingebunden, mit folgendem
1 24 "manifest.xml"
und die dazugehörige "manifest.xml" steht unten (die Felder mit "xxx"
noch anpassen). Damit werden alle Windows-Versionen erkannt und das
Programm läuft so, wie man es sich denkt :-)
Gruß Matthias.
--- schnipp ---
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="xxxAuthorNamexxx.xxxProgramNamexxx"
processorArchitecture="x86"
version="1.2.3.4"
type="win32" />
<description>xxx Beschreibung des Programms xxx</description>
<!-- Identify the application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="AsInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>true</dpiAware>
</asmv3:windowsSettings>
</asmv3:application>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- 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}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*" />
</dependentAssembly>
</dependency>
</assembly>
Hans-Peter Diettrich
2018-05-14 07:14:30 UTC
Permalink
Post by Stefan M. Huber
Post by Helmuth J.H. Adolph
Hallo,
die Funktion CheckWin32Version(6,0) soll TRUE zurückgeben wenn das
Programm auf einem Rechner mit einer Windowsversion ab Vista läuft.
Das tut sie auch, außer das Programm heißt Setup.exe. Das Programm
läuft dann automatisch im XP-Kompatibilitätsmodus und es wird FALSE
zurückgegeben. Das läßt sich auch nicht abschalten.
Kopiere ich das Programm auf einen USB-Stick, läuft es nicht im
XP-Kompatibilitätsmodus.
Irgendeine Idee wie man den Kompatibilitätsmodus ausschalten kann?
Nicht konkret in diesem Fall, aber ich erinnere mich an Geschichten mit
der Manifest-Datei. Evtl. musst du bestimmte Informationen dort
aufnehmen, damit dein Programm einfach so gestartet wird.
Oder die Manifestdatei löschen. Die wurde ja vermutlich nicht auf den
Stick kopiert, und dort lief das Programm dann wie gewünscht.

DoDi

Loading...