When setting compatibility mode to an executable (as described in the ansers to this question), is this applied in any context - be it being run from Explorer, by a shortcut, or from a cmd or Powershell script, or called directly in one of the latter?

Or how could I verify if the set compatibility mode is in effect in the different contexts mentioned above (without compiling some self written c/c++-code)?

  • 3
    As part of a process being created on Windows a number of common initialisation steps are performed regardless of how the process is created. One of them is checking shims and compatibility settings from \Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers. Others include reading Image File Execution Paths, AppInit_dlls where User32.dll is loaded, etc.. If you use Process Monitor you will see all these keys being read from as the process starts. – HelpingHand Sep 8 '18 at 9:08
  • @HelpingHand: Why not write this as an answer? – harrymc Sep 8 '18 at 16:50
  • I guess, observing registry reads as a process starts is one thing, verifying a process post launch has comparability options set is another. I'm sure you can obtain this info from the Process Environment Block (PEB) of the process if you know what the values mean. AppCompatFlags, AppCompatFlagsUser? I don't feel this is a full answer. – HelpingHand Sep 8 '18 at 21:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.