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.

Comments

  • Anonymous
    January 30, 2013
    Well this was close to helping me but...my situation is that I'm running a 64bit OS (Win 8) using the SCCM 2007 (32bit) client. I have a service that initiates hardware inventory at specific times but when my 64bit service attempts to create the COM object (CPApplet) it gets the same error because their is no 64bit interface...what can I do? The service would have more issues if 32bit so that isn't an option. A shim for the other direction would be nice!
  • Anonymous
    September 23, 2013
    The comment has been removed