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
    

Anmelden zum Antworten