SMS Client Auto-Repair
The next logical question in my client saga is; Just when does that client try to initiate a repair?
Turns out,as you might guess, that there are a host of reasons:
1. CCMEXEC tries to connect to the root\ccm WMI namespace. If the namespace does
not exist, it will flag a repair.
2. CCMEXEC tries to open the key
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Performance for reading.
a) If it succeeds and the value PerfCorruptionDetected exists under
HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Performance, it won't flag a repair.
(Setup will create this value if it detects that the performance counters are
corrupted by an application other than a failed OS upgrade or a co-located
installation).
b) If it fails to open HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Performance, it
will flag a repair.
c) If it successfully opens HKEY_LOCAL_MACHINE\Software\Microsoft\CCM\Performance
but the subkey CcmFramework does not exist, it will flag a repair.
3. CCMEXEC calls MsiEnumClients() to find all products in the MSI database that are
using a known CCM component - {8B8DEDE2-A4E4-4182-971B-96B4322F9803}.
b) Next, CCMEXEC connects to the root\ccm WMI namespace and runs 'select * from
CCM_InstalledProduct where ProductCode = 'xxx'" (xxx is the ProductCode it got from
MSI). If it doesn't find a match, it will flag a repair.
4. At last, CCMEXEC checks to see if the file cpapplet_ps.dll exists. If the file
exists, NTFS is in use and there's either no security set on the file or there's
not an ACE for the interactive user on the file, it will trigger a repair. Certain
OS upgrades will fall under this category.