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/)
-   -   Windows Kompatibilitätsmodus verbieten (https://www.delphipraxis.net/212220-windows-kompatibilitaetsmodus-verbieten.html)

Michael II 6. Jan 2023 12:46

Windows Kompatibilitätsmodus verbieten
 
Kürzlich meldete sich ein Kunde, er könne meine Software nicht mehr nutzen. Dank einer Teamviewer Sitzung sah ich, dass meine App auf dem Kunden Computer wider Erwarten beim Start Admin Rechte verlangt. Grund: Der Kompatibilitätsmodus war für die App eingeschaltet; OS war auf "Windows XP SP3" gesetzt.

Meine Frage: Kann ich verhindern, dass für meine App der KM aktiviert werden kann?

mmw 6. Jan 2023 13:19

AW: Windows Kompatibilitätsmodus verbieten
 
Hallo,
es sollte reichen, das Programmm aus dem entsprechen Registry Key zu löschen.

https://www.verboon.info/2011/03/run...tibility-mode/

Gruß

Uwe Raabe 6. Jan 2023 13:40

AW: Windows Kompatibilitätsmodus verbieten
 
Das kann das Programm selbst aber nur machen, wenn es schon läuft. Also bleibt zumindest die Passwortabfrage beim ersten Start.

jaenicke 6. Jan 2023 14:18

AW: Windows Kompatibilitätsmodus verbieten
 
Wenn du ein Manifest drin hättest, das dein Programm als kompatibel mit einer neueren Version von Windows ausweist, sollte man auch keinen so alten Kompatibilitätsmodus setzen können, der Adminrechte anfordert.

Michael II 6. Jan 2023 15:31

AW: Windows Kompatibilitätsmodus verbieten
 
Besten Dank für all eure Meldungen.

Danke mmw. Immerhin kann ich so die Registry-Einträge im Installer der App killen. Dankeschön.
(Neuinstallation half dem Kunden nix, da der KM Registry-Eintrag bestehen bleibt. Der Wert wurde wohl von irgend einem "Optimierer" und sicher nicht von mir oder direkt vom Kunden gesetzt.)

Wie Uwe schreibt: Wenn die App selbst den KM killen soll, dann muss der Kunde Admin freischalten. (Weit über 50% meiner Kunden haben mit Windows Dingen absolut nix am Hut; die App wird oft von Tochter oder Sohn installiert. Steiniger Weg.)

Danke jaenicke:
Ich verwende für die App das Manifest, welches Delphi 11.2 z.V. stellt. Sollte ich dieses anpassen?
Du schreibst, man sollte XP Kompatibilität nicht setzen können:
Ich habe rasch getestet, ob ich für Delphi 11.2 den Kompatibilitätsmodus auf "Win XP SP3" setzen kann. Ich kann. Ist das Manifest von Delphi 11.2 also auch "mangelhaft"?
Ich verwende: Microsoft Windows 11 [Version 10.0.22623.1095]
Der Kunde hat ein Win 10 drauf.

[Dieses "Problem" war mir bisher nicht bekannt. App auf mehr als 40'000 Kisten installiert, ein paar hundert Kisten haben bis dato >3000 Updates installiert. Die App lief früher auch unter XP, ohne Admin. Wird im KM XP SP3 Admin verlangt, weil das Manifest von 11.2 dies bewirkt? Da sollte ich mich wohl dringend mal einlesen...;-)]

himitsu 6. Jan 2023 16:18

AW: Windows Kompatibilitätsmodus verbieten
 
Verbieten geht nicht, aber man kann verhindern, dass durch Windows es automatisch aktiviert wird.

Du könntest GetSystemInfo mit GetNativeSystemInfo vergleichen und versuchen zu erkennen, ob der Kompatibilitätsmodus aktiv ist und dann den Nutzer warnen informieren.



"Automatisch" geht der Kompatibilitätsmodus eigentlich nur an, wenn die ID der jeweiligen Windows-Version nicht in der Liste der supportedOS enthalten ist.
Es wird dann davon ausgegangen daß die Anwendung nicht kompatibel ist und über eine Heuristik oder Sonstwas wird dann versucht zu erkennen was vermutlich nötig ist.
z.B. wird über Keywords im Dateinamen, wie z.B. "setup" oder "install", davon ausgegangen, dass es ein "Installer" ist und demnach Adminrechte benötigt.

Manuell kann man aber dennoch daran etwas verändern.



Delphi 11.2 sieht diesbezüglich OK aus.
Code:
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
   <application>
      <!--The ID below indicates app support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates app support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--The ID below indicates app support for Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <!--The ID below indicates app support for Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!--The ID below indicates app support for Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>         
   </application>
</compatibility>
Ja, Windows 11 fehlt scheinbar, aber auch nur, wenn man nicht bedenkt, dass Windows 11 keine neue ID bekommen hat und immernoch die Windows 10-ID benutzt. :freak:

Dalai 6. Jan 2023 16:25

AW: Windows Kompatibilitätsmodus verbieten
 
Zitat:

Zitat von jaenicke (Beitrag 1517102)
Wenn du ein Manifest drin hättest, das dein Programm als kompatibel mit einer neueren Version von Windows ausweist, sollte man auch keinen so alten Kompatibilitätsmodus setzen können, der Adminrechte anfordert.

Diese Aussage verstehe ich nicht. Selbst bei Anwendungen, die Kompatibilität für alle bekannten Windows-Versionen ausweisen, kann man diese im Kompatibilitätsmodus ausführen. Warum sollte das auch nicht gehen? Gerade das Ausführen als Admin kann je nach Situation sinnvoll sein (auch wenn man es grundsätzlich nur dann tun sollte, wenn es wirklich nicht anders geht).

Grüße
Dalai

himitsu 6. Jan 2023 17:40

AW: Windows Kompatibilitätsmodus verbieten
 
Das muß ja auch möglich sein,
denn nur weil der Entwickler "denkt" sein Programm sei kompatibel (oder es einfach nur blind gesetzt hat), dann muß es das noch lange nicht sein.

Vor allem nicht im Delphi, seit Delphi diese Kompatibilität vorgibt und wir kein eigenes Manifest mehr angeben.

jaenicke 6. Jan 2023 18:19

AW: Windows Kompatibilitätsmodus verbieten
 
Zitat:

Zitat von Dalai (Beitrag 1517111)
Selbst bei Anwendungen, die Kompatibilität für alle bekannten Windows-Versionen ausweisen, kann man diese im Kompatibilitätsmodus ausführen. Warum sollte das auch nicht gehen? Gerade das Ausführen als Admin kann je nach Situation sinnvoll sein (auch wenn man es grundsätzlich nur dann tun sollte, wenn es wirklich nicht anders geht).

Also hier (Windows 11) kann ich dann nur bis Windows 7 zurück gehen, was die automatische Anforderung von Adminrechten nicht einschließt. Ältere Anwendungen von mir mit alten Manifesten kann ich hingegen bis auf Windows 95 setzen.

himitsu 6. Jan 2023 18:46

AW: Windows Kompatibilitätsmodus verbieten
 
9x kann mit aktuellerem Delphi auch garnicht gehn, da RTL/VCL viele WinAPIs benutzt, welche erst später eingeführt wurden.

Es wäre schon intelligent, wenn die Imports geprüft werden und dann komplett inkompatible Windows-Versionen ausgeschlossen würden.



Oder komplett ganz einfach.
Im PE-Header steht die Mindestversion und das wurde vor 'ner kleinen Weile im Delphi hochgesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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