SDK: 32-bit legacy programs interoperating with the 64-bit client using COM

Update @ 2013-06-21: CU2 has been relreased and has a fix for the CPApplet issues. Please reference my latest post about this fix.

Update @ 2013-06-05: A fix for the CPApplet interfaces not being accessible from 32-bit processes will be released as part of Configuration Manager 2012 SP1 CU2. I'll write a full blog post once CU2 releases.

Update @ 2013-03-21: We are aware of an issue with CPApplet interfaces not being accessible from 32-bit processes. Once I have something to share regarding a solution for this I will post about it here.

Configuration Manager 2012 for the first time offers a 64-bit native client. This will create problems if you’re using a 32-bit native application that depends on COM interfaces defined by the older 32-bit client. The most likely issue would be your applications failing with a 0x80040154 (class not registered) error. Fortunately, you don’t need to despair or rebuild your programs for 64-bit (or “Any” if .NET).

We have shipped a set of compatibility shims as part of the program bundle that will allow 32-bit programs to invoke COM methods against the 64-bit client. You will need to install the 32BitCompat.msi that is part of the CD. It can be found under SMSSETUP\BIN\X64. You can even deploy this to your 64-bit clients as part of an application deployment. Make sure you scope this to run only on 64-bit systems as it will fail to install on 32-bit systems.

The following are shimmed out to allow 32-bit interoperability:

  • ccmcca.dll
  • ccmcisdk.dll
  • ccmctm.dll
  • ccmexec.exe
  • ccmproxy.dll
  • ciagent.dll
  • contentaccess.dll
  • cpapplet.dll
  • dcmagent.dll
  • execmgr.dll
  • rebootcoord.dll
  • rtconfig.dll
  • scanagent.dll
  • sched.dll
  • smsclient.dll
  • smssha.dll
  • srcupdatemgr.dll
  • srvwinmgr.dll
  • statemessage.dll
  • uiresource.dll
  • updatesdeployment.dll
  • updatesstore.dll

Note: This is only required if you’re using 32-bit native applications for COM interop. 64-bit native applications, or .NET applications compiled as “Any” do not require this to be installed.