Disabling a Shim

The other day I was working on an application that we apparently shimmed. I wanted to know if disabling the shim actually changed the behavior.

You can download ACT and go hunt for the executable. (For some interesting reason that fully escapes me, you should uncheck every checkbox in the Query dialog to get the search to find anything at all.) When I found the entry and disabled it, there was no change in behavior. That doesn’t mean the shim was still in place though. So I needed to know for sure.

Digging up the expert knowledge from “the” apcompat guy, gave me the info for getting the logging enabled. Hooking up DebugView and I still see the shim applied. Even flushing the cache didn’t prove helpful (Rundll32 apphelp.dll,ShimFlushCache). Hmm. Sledgehammer then.

You can disable the whole shim engine through this setting from GPEdit.msc:

Administrative Templates \ Windows Components \ Application Compatibility \ Turn off Application Compatibility Engine

Setting it to enabled means that the Shim engine is off. Reboot and there you have it. No output in DebugView.

Now I need to figure out why I can’t disable this thing on a per shim entry basis.

Comments (1)

  1. probably_responding_to_black_hole says:

    You can find and delete the entry corresponding to your app's path in the following two registry keys to remove appcompat.

    HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionAppCompatFlagsCompatibility AssistantPersisted

    HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsLayers