I forgot one sentence in the introduction above, but it might as well stand here
For the (a little above average) knowledgeable, Run in compatibility mode should be known and is found in an infinite number of threads out there and so it was left out. For the record though, this is the very first step to check and if you need information, you can find it here.
Another thing I could have noted, it is just that I somehow keep thinking that most out there search the net to obtain information…
One place to start to find information about compatibility for the old games is here. Microsoft is not the greatest source for information when it comes to games and many will skip links pointing there. In this case, the list is extensive and so I wanted to use it as an example.
When you let your mouth run off before checking, you are bound to get hit by your own ignorance.
I have searched the net, checked more than 60 ‘unknown’ games from 1997-2004 and they are all compatible apart from the few based on 16-bit code. Now, I simply choose to give up… That’s a jerk for you
I know I did fix a game in late August for a friend, but he is on holiday and I can’t reach him at the moment. Personally, I can not remember the name and so, I will have to do even this part straight off my brain just like the first. This is not necessarily a bad thing as the information better be in there before you promise to do anything :), but just as in the first part, it is easy to forget small bits of information when you do a walk-through without actually working with an incompatible candidate while you do it. Anyway, I think I should be able to cover it in detail and then I can answer if there is something in particular you feel is missing.
So, you got a message about a compatibility issue from Windows 10? Make a backup, then proceed
Do not take this lightly as it may actually get you into trouble, so search the net for information about the program or game related to Windows 8-10.
In any case, do A COMPLETE BACKUP OF YOUR PC and make a SYSTEM RESTORE POINT before proceeding.
I recommend you make yourself able to boot from a USB/CD to restore the backup if need be.
* Windows will not even let you install/run the game or program as it seem to already know that it will get you into trouble.
* We have an old candidate we would like to run on an operating system that tells us that the program/game has compatibility issues!
* The case may just be down to the Program Folder hierarchy or to use the administrative command prompt, but we do not know that yet.
There are a few possible causes to why games do not work, but here the two most important are User Account Control (UAC) and the Program Compatibility Assistant (PCA).
The quickest test is to turn off UAC by going to the Control Panel, open User Accounts, click on Change User Account Settings and drag the slider all the way down, but in this case we have gotten a message about compatibility issues, and so we can not start there, we will have to start by turning off or tune PCA to get rid of parts or the entire feature that will not let us try to fix it ourselves.
UAC is responsible for elevating processes that need administrative access to your computer.
PCA works off the image name and meta data about the image (version info, manifest info a.s.o).
PCA is in reality rather dumb as it 1. Looks up the name in its database and 2. Checks the metada in that strict/absolute order for most entries in the database.
It means for the most that if you change the name of the setup-file to any other name, it is not found in the database with the correct metadata and the assistant will not kick in.
In example, if it is named Setup.exe, rename it to Getup.exe and it will buypass the PCA. The same is true for the main game or program file. In the latter case, I usually make a copy of the main executable and rename that so they both are available. Then I update the shortcuts manually to point to the renamed file and all is usually well even with PCA on. After that, it is a question of tweaking the compatibility settings in the file properties.
Of course, if your installer is on a CD, renaming is no option, at least not for copy protected CDs - However, some copy protection does not apply to the installer, only to running the game and so it can be possible to copy the entire CD to the root of a USB stick where you can rename the installer (leaving the CD in the drive may be a clue to trick any possible checks)
Then there is the SwitchBack Engine which is responsible for mitigation to make older programs run. For this engine I usually try both the on and off setting to see if it may help, but to have full control it must be off. In a day to day situation, I recommend it to be on unless you feel confident to configure compatibility for old applications yourself or only have updated applications (no old utiltities) in use. As stated in the description: This option is useful for server administrators who require performance and are aware of compatibility of the applications they are using..
There is a reason for this lenghty introduction as to what we can do without turning off PCA/UAC/SBEngine.
Both of these features are part of your computer’s security, and so I will advice you to switch it off prior to playing the game, then switch it on again. I do not think I have read anyone else writing about that aspect and so I wanted you to be aware that you are actually weakening your security and possibly system stability here, more on switching on and off later.
The PCA/UAC is partly linked in your operating system as well, and turning off UAC, can cause PCA to not execute a child process of an installer correctly. What happens is that PCA try to bring up an UAC requester for the child process to let you elevate it to administrative level, but since UAC is turned off it could ultimately fail, but not necessarily as it depends on the rights assigned to your user account (linked via the shim database).
Just for the record, it is not enough to turn off these two alone to stop the compatibility issues being sent to Microsoft as they will unless you turn also turn off Application telemetry.
O.k. nothing works, let us do it!
First of all, turn off the ‘Program Compatibility Assistant Service’.
Hold down [Winkey] and press [R]
Type services.msc abd press [Enter]
Scroll down to the Program Compatibility Assistant Service
Click once on it and then in the middle pane, click Stop the service
Once the above requester closes, double-click on the line that reads Program Compatibility Assistant Service as seen above
Set the ‘Startup type:’ to Disabled as shown, and click OK.
I did leave the cursor to bring your attention to the name of the service PcaSvc as it is needed to switch it all on and off quickly.
The next step is to change the group policy which only applies if you have Windows 10 Pro or Enterprise.
The Group Policy editor gpedit.msc is not found on the ‘Home’ edition of Windows 10 to my knowlwdge (While I have never tried, my guess is it should be possible to port it to the home edition, but that is another story).
Do not worry, You can download an archive below with the settings needed and apply it directly to the registry instead. I will be explaining it using gpedit.msc with screenshots below, then I will comment the actual script.
- Hold down [WinKey] and tap [R] on your keyboard (or right-click you Start menu button and choose ‘Run’)
- type gpedit.msc and hit [Enter]
- In the left pane, expand Computer Configuration then Administrative Templates, Windows Components and finally click on Application Compatibility as shown above
- In the right pane, you will have several entries, and for us, there are three important, first double-click Turn off Program Compatibility Assistant
- Click on the button next to Enabled and click on OK. I expanded the window so you can see the entire description for you interested in the additional inforrmation
- Now double-click on Turn off Application Compatibility Engine
- Click on the button next to Enabled and click on OK. Again, the description is informative, but I it is a little longer than the first so I made the window the minimum size with the most important part in sight.
08 Now double-click on Turn off SwitchBack Compatibility Engine
- Click on the button next to Enabled and click on OK. Take time to read what it says, it is important.
- Open Control Panel, open User Accounts, click on Change User Account Settings and drag the slider all the way down to ‘Never notify’. Then cllick OK (Screenshots is not necessary here imo)
Restart your computer (We can not use gpupdate /force to refresh policy due to chaching)
- Retry the installation
That is all that is needed to be done and even if you will find one setting also in User Configuration - Administrative Templates - Windows Components - Application Compatibility, it should not be necessary to set it there as it is only for backward compatibility.
It is not too much to set and reset using even the windows applications explained above. Personally though, I think it is better to use scripts to change settings as it is faster.
Now, script and registry files are usually separated in two parts out here, but I find that cumbersome and even though it is the standard way of doing it, I opt for only two scripts where I implement the registry changes as well. StopPCA.bat and StartPCA.bat.
* Both files must be run as admin - right-click Run as Administrator
* Both files will try to reboot your PC. The reboot is not forced and so any requester for unsaved work or anything else hanging will prevent it from rebooting. In that case, restart your PC manually
I will discuss this in detail below but first, here is the downlad for the scripts
[I](incorrect link removed; see next post for correct download: “StartStopPCA_corrected.zip”)[/I]
We are going to use the following three commands
sc.exe. SC is short for Service Control, and we can start/stop and control the startup type of the services using it.
reg.exe handles adding and removing registry entries from the command line
shutdown.exe needed to restart the computer to turn off and on UAC.
Then we need to modify entries in three registry keys:
Entries for the two above:
DisableEngine (controls Application Compatibility Engine)
DisablePCA (controls Program Compatibility Assistant)
SbEnable(controls SwitchBack Engine)
EnableLUA (Controls User Account Control aka UAC)
To stop/disable the service and turn off the Program Compatibility Assistant:
sc stop PcaSvc
sc config PcaSvc start= disabled
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat /v DisableEngine /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat /v DisablePCA /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat /v SbEnable /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\AppCompat /v DisableEngine /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\AppCompat /v DisablePCA /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\AppCompat /v SbEnable /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
shutdown /r /t 0
To turn on the Program Compatibility Assistant and enable/start the service again:
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat /v DisableEngine /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat /v DisablePCA /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\AppCompat /v SbEnable /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\AppCompat /v DisableEngine /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\AppCompat /v DisablePCA /t REG_DWORD /d 0 /f
reg add HKLM\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\AppCompat /v SbEnable /t REG_DWORD /d 1 /f
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f
sc config PcaSvc start= auto
sc start PcaSvc
shutdown /r /t 0
Do not clear the Program Compatibility Assistant (PCA) shim database (.sdb)
I read this ‘trick’ on the net once, but it will probably get you into more trouble than it will do you good. The actual installer database has thousands of entries that for the most part is there to make your computer life easier. To make PCA a dummy by clearing the database, is like shooting a sparrow with a cannon. If you do clear it, PCA will not know of any incompatible programs and while it will make us able to decide for ourself what compatibility settings we would like to add, we will have to add compatibility to all old programs ourselves, also those that currently runs well due to the databases.
Note to the advanced
There is another way of doing it instead of turning off PCA, like adding a Manifest-resource to the executable, but that is a story for the ‘way above average’ computer techy bit-fumblers out there.
Depending on the internal checks/copy protection this approach could possibly fail, but in this case we are not touching the executable code, only the resource section and I have fixed several old programs this way as they were initially not even able to run in Windows 10 due to side-by-side errors and such (some took a tad more work) ;).
Resource Hacker is such a program, or if you are lazy and rather pay for convenience, HeavenTools Resource Tuner 2, which will make the manifests for you. You will still have to read a little about Manifests, but the latter program knows the strings needed and will pop up a warning if you try to add a themed manifest when the program does not initialize ComCtl32.dll.
The manifest works by adding “Trustinfo” and “Compatibility” sections for the OS (Vista-10) within the executable itself and so PCA is not needed.
I have not checked, but even changing version information in a hex-editor may be enough to avoid PCA kicking in.
I do not link anywhere here, as it is for the advanced, I just wanted to mention the possibility
That concludes part 2. I hope I managed to even tell you something you did not know as well
If anything is perceived as ‘gargleblasting’. just ask and I will try to clarify… If you feel anything in particular is missing, just ask and I or anyone who beats me to it will add it to the thread.