Kompatibilitätsmodus unter Vista, wie erkennen ob eigens Programm diesen benutzt
-
Hallo, habe ich in meinem Programm die Möglichkeit abzufragen, ob mein Programm vom Anwender unter Vista im Kompatibilitätsmodus gestartet wurde? Wenn ja wie, und kann ich dann auch den Modus ermittlen unter dem es läuft.
-
WIE startet denn der Anwendung Deine Anwendung im "Kompatibilitätsmodus"? DU meinst das in den Eigenschaften-Tab der EXE?
Leider gibt es dazu AFAIK keine API so wtwas abzufragen... Du willst sozusagen wissen, ob irgendwelche SHIMs aktiv sind...
Du könntest es versuchen über die Registry rauszufinden, was aber auch nicht wirklich winnvoll ist, da auch SHIMs durch DLLs getriggert werden können...WARUM willst Du das überhaupt wissen?
Nur so nebenbei: Wenn DU kein Manifest hast, dann wird Deine Anwednung unter Vista "virtualisiert"... da braucht der Anwender nix zu machen...
-
Ja, ich habe ein Manifest in meiner Anwendung. Wie du ja sicherlich weisst, kann man unter Vista eine *.exe per rechtsklick usw... auf "Starten im Kompatibilitätsmods" ausführen. So, wenn nun meine Anwendung so gestartet wurde und ich intern per GetVersion die Version des OS abfrage, so erhält ein im Kombatibilitätsmodus gestartetes Programm nicht die Information die ich will, nähmlich dass der Anwender eigentlich mit Vista arbeitet. GetVersion sagt mir dann nur was meinem Programm vorgegaukelt wird, das ist der Hintergrund meiner Frage. Es geht eigentlich nicht darum, dass der "Normale" Anwender meine Anwendung richtig benutzt, es geht mir vielmehr darum herauszufinden welches OS wirklich benutzt wird, zwecks "Fehler.log", in der ich solche Informationen hinterlegen möchte.
-
Verwende WMI um diese Infos auszulesen, z.B.:
Win32_OperatingSystem =>BootDevice: \Device\HarddiskVolume2 BuildNumber: 6001 BuildType: Multiprocessor Free Caption: Microsoft® Windows Vista™ Ultimate CodeSet: 1252 CountryCode: 49 CreationClassName: Win32_OperatingSystem CSCreationClassName: Win32_ComputerSystem CSDVersion: Service Pack 1 CSName: xxx CurrentTimeZone: 60 DataExecutionPrevention_32BitApplications: True DataExecutionPrevention_Available: True DataExecutionPrevention_Drivers: True DataExecutionPrevention_SupportPolicy: 2 Debug: False Description: Distributed: False EncryptionLevel: 256 ForegroundApplicationBoost: 2 FreePhysicalMemory: 4105340 FreeSpaceInPagingFiles: 6437368 FreeVirtualMemory: 10439840 InstallDate: 20070517180346.000000+120 LastBootUpTime: 20090312073402.032722+060 LocalDateTime: 20090312111607.345000+060 Locale: 0407 Manufacturer: Microsoft Corporation MaxNumberOfProcesses: 4294967295 MaxProcessMemorySize: 8589934464 MUILanguages: System.String[]: de-DE en-US Name: Microsoft® Windows Vista™ Ultimate |C:\Windows|\Device\Harddisk0\Partition2 NumberOfProcesses: 71 NumberOfUsers: 3 OperatingSystemSKU: 1 Organization: OSArchitecture: 64-Bit OSLanguage: 1031 OSProductSuite: 256 OSType: 18 Primary: True ProductType: 1 QuantumLength: 1 QuantumType: 1 RegisteredUser: xxx SerialNumber: abc ServicePackMajorVersion: 1 ServicePackMinorVersion: 0 SizeStoredInPagingFiles: 6530068 Status: OK SuiteMask: 272 SystemDevice: \Device\HarddiskVolume2 SystemDirectory: C:\Windows\system32 SystemDrive: C: TotalVirtualMemorySize: 12653648 TotalVisibleMemorySize: 6222868 Version: 6.0.6001 WindowsDirectory: C:\Windows