Windows 10 Game compatibility

vbimport

#1

Games - I love games, especially those that you can waste a few minutes with!
From time to time, I have to (yet again) revive an old game I love for a new operating system and so let me teach you a few tricks for Windows 10.

Introduction
Before I begin, there is a limit as to how far back you can go with a game, and that limit is sometime in the 1990s.

  1. A good, general advice is to do regular backups of your OS and create a System restore point before any install.
  2. 16-bit games (DOS/Windows 3.1) wil not run in a 64-bit environment unless you use an emulator like DOS-Box or other virtual environments (not covered here)
  3. 32-bit games (Windows 9.x) can fail if they have a 16-bit installer (not too uncommon even around the millennium). You will have to install these in a 32-bit Windows and manually move them (not covered here)
  4. Some copy protections such as Starforce will make running the game impossible as the protection (not game) is incompatible. In this situation, there is no way around cracking the game… sadly (not covered here).
  5. I will split this in two parts and will update the thread with part 2 once I get around to do it (probably tomorrow)
    I am going to discuss this in the context of the (a little above average) knowledgeable out there. There is a reason for this approach as it is hard not to touch subjects like ‘Group Policy’, ‘Services’…
    On the bright side, most of the information found here will apply to Windows 7 and 8.1 as well. The computer I source the information from is a typical Windows 10 Pro x64 installation though.

The games that will install without being flagged as ‘incompatible’, but will not install or run anyway
This the least advanced, and the part I think even the average computer user can follow. It is an all too common scenario if you insert the games CD and go the ‘Next’, ‘Next’, ‘Finish’ route through the installer - and I’ll explain it to you.

When Windows Vista came along, several policies changed for the ‘Program Files’ and ‘Program Files (x86)’ folders.
Suddenly the programs were no longer able to write to their own folder, but had to use the ‘ProgramData’ (Allusers) or ‘Users’ (CurrentUser) folder hierarchy for the configuration files and so on.
This is the single most common point of failure for old programs and games as they keep and update their configuration file in their own folder and thus the ‘Next’, ‘Next’, ‘Finish’ route will only make the game fail upon first run.

To get around the impossible ‘Program Files’ situation:

  1. Open ‘This PC
  2. Open (assuming default install) your Local Disk (C:) drive.
  3. Make sure no files or folders are selected, then click ‘New folder’ found in the ‘Home’ tab on top.
  4. Name this folder Programs
    This is the (Program Files) folder you should install all your old programs and games to because in this folder, the programs and games are able to write to their own folder.

Now I will not use any example screenshots in this part as there simply are too many variations out there, but insert your CD and run the installer.
Here is the clue.

  1. For each time you click ‘Next’ check the installer step for ‘Custom’ or ‘Let me choose…’ or any other wording in the same vein and click it.
  2. Change only the part of the installation path that reads Program Files and replace it with Programs
  3. Click OK, Next or whatever the name of the button to accept the change is named.
  4. Continue the installation as you would normally do.

The above will take care of about half the problematic old games and programs alone…
However, it must be noted that a select few games have hard-coded paths which you can not change and while there are ways around even that, I will not cover it as it will take up too much space and clutter the subject.

What if the installer hangs in the middle of the installation?
That is a different situation and not too uncommon either. The reason for it is most probably that the installer tries to install some dependencies like DirectX, system DLLs and so on and it is not allowed the way the installer is run.

To get around this situation, there are two ways to go about it. Either open the CD drive, right-click the installer and choose ‘Run as administrator’ then follow the description above or use an administrative command prompt
The first method has been described in an infinite number of threads on the net already and so I am not going to challenge anyone’s intellect by describing it once more. However, I had to mention it to tell you that it may not be enough and that the installer may hang even then.
The reason is that when you run the installer by right-clicking and choose ‘Run as administrator’, you only run the installer in that context. Any other executable which is part of the installation and run by the installer is run in the context of your user.

To your rescue comes the administrative command prompt - There is a huge difference to the two methods because when you launch the installer from an administrative command prompt, any program run by the installer will run in the context of the command line interface and thus will run as administrator (it somehow occurs to me that many of you do not know this difference)

So learn to do it the retro way from the start:

  1. Right-Click your start menu button
  2. Choose Command Prompt (Admin) from the context menu
  3. Type the drive letter for your CD drive followed by a colon like this E: and hit [Enter] (open ‘This PC’ and look it up if you do not know the drive letter)
  4. Type Dir or Dir /p and hit [Enter] to find the name of the installer (typical Install.exe or Setup.exe)
  5. In the event that your installer resides in a folder on the CD and not at the root, simply issue the command CD {folder} where you substitue {folder} with the name of your folder.
  6. Type the name of the installer, i.e. Setup.exe and hit [Enter]
  7. For each time you click ‘Next’ check the installer step for ‘Custom’ or ‘Let me choose…’ or any other wording in the same vein and click it.
  8. Change only the part of the installation path that reads Program Files and replace it with Programs
  9. Click OK, Next or whatever the name of the button to accept the change is named.
  10. Continue the installation as you would normally do.

Now that should take care of another 10-25% of installations for old games and programs and we are up to about 60-75% of the old games that are actually compatible.

The above should be enough information for many games, and this only gets more advanced from here. By that I mean that if I managed to confuse you above, I suggest you stop following the rest until you feel comfortable with the basics :wink:

That concludes part one. If anything above is perceived as gargleblasting, do not hesitate in asking a question or 10.


#2

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.

Part 2
When you let your mouth run off before checking, you are bound to get hit by your own ignorance. :wink:
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 :wink:
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.

The facts:
* 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.

  1. Hold down [WinKey] and tap [R] on your keyboard (or right-click you Start menu button and choose ‘Run’)
  2. type gpedit.msc and hit [Enter]

  1. In the left pane, expand Computer Configuration then Administrative Templates, Windows Components and finally click on Application Compatibility as shown above
  2. In the right pane, you will have several entries, and for us, there are three important, first double-click Turn off Program Compatibility Assistant

  1. 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
  2. Now double-click on Turn off Application Compatibility Engine

  1. 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

  1. Click on the button next to Enabled and click on OK. Take time to read what it says, it is important.
  2. 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)
  3. Restart your computer (We can not use gpupdate /force to refresh policy due to chaching)
  4. 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.

Requirements:
* 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:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\AppCompat
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows\AppCompat
Entries for the two above:
DisableEngine (controls Application Compatibility Engine)
DisablePCA (controls Program Compatibility Assistant)
SbEnable(controls SwitchBack Engine)
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Policies\System
Entry
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

Addendum
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 :flower:
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.


#3

WHOOPST. DO NOT DOWNLOAD ABOVE DOWNLOAD HERE

forget to verify only one line as you are tired and getting ready for bed and that is where the error sneak in:

To stop PCA:
The line:
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
should be:
[B]reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
[/B]

To start PCA
The line:
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f
should be:
[B]reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f[/B]

I did “verify” the script by applying it to my system, but the LUA setting was already set to zero due to group policy. Then when reversing the changes by starting it again, I failed to check only that key. I have no explanation as to how the error managed to sneak in :confused:

I noticed this morning as I was unable to start a universal app due to UAC not running.

StartStopPCA_corrected.zip (870 Bytes)


#4

There may actually be something to add to it as a comment before any question about it is asked.

The script was created to give you the best start as to get an old game to work, and was created from a ‘[B]turn it off[/B]’ - ‘[B]play[/B]’ - ‘[B]turn it on[/B]’ kind of view.

The line to turn off UAC entirely (as reported in the error above), may be something you should think about before applying if you want to have the PCA in a off setting by default.

The reason, as I write above is that no universal apps work when it is turned off and since settings is also a universal app, not even that will work. In this setting, your best bet is to only drag the slider in [B]Control Panel[/B]->[B]User Accounts[/B]->[B]Change User Account settings[/B] all the way down to [B]Never notify[/B] and stick to that.

I can not recommend the approach as reasoned in part 2, but of course, I know some insist on having it off by default and to still keep reasonable day to day functionality, removing that line entirely from the script will make you able to keep the best from both worlds.

I leave it up to you you to edit the script.