This error is found on secondary servers running Microsoft System Center Configuration Manager (SCCM or ConfigMgr) 2007 SP1.
Solution is similar to John Marcum's post here
Error from mpfdm.log:
Verifying local MP outbox directory E:\Program Files\Microsoft Configuration Manager\MP\OUTBOXES\AIKbMgr.box for Asset Intelligence KB Manager exists... SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 240 (0x00F0)
**ERROR: Cannot find path for destination inbox Asset Intelligence KB Manager on server REGISTRY SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 240 (0x00F0)
Worker thread [Asset Intelligence KB Manager] cannot update environment so skiping outbox processing. SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 240 (0x00F0)
Updating environment... SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 2272 (0x08E0)
Verifying local MP outbox directory E:\Program Files\Microsoft Configuration Manager\MP\OUTBOXES\amtproxy.box for SMS_AMT_PROXY_COMPONENT exists... SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 2272 (0x08E0)
**ERROR: Cannot find path for destination inbox SMS_AMT_PROXY_COMPONENT on server REGISTRY SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 2272 (0x08E0)
Worker thread [SMS_AMT_PROXY_COMPONENT] cannot update environment so skiping outbox processing. SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 2272 (0x08E0)
Updating environment... SMS_MP_FILE_DISPATCH_MANAGER 7/16/2009 11:25:19 AM 2608 (0x0A30)
Solutions
Add the following reg keys to each of your effected secondary sites. (save the following into a *.reg file)
Inbox Fix
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\MPFDM\Inboxes]
"Asset Intelligence KB Manager"="E:\\Program Files\\Microsoft Configuration Manager\\inboxes\\AIKbMgr.box"
"SMS_AMT_PROXY_COMPONENT"="E:\\Program Files\\Microsoft Configuration Manager\\inboxes\\amtproxy.box"
Asset Intelligence fix:
Note: you will need to identify the next largest key value. In my example it was key 49
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Inbox Source\Inbox Definitions\49]
"Inbox Name"="Asset Intelligence KB Manager"
"Relative Path"="inboxes\\AIKbMgr.box"
"NAL Path"=""
"User Rights"=dword:00000000
"Service Rights"=dword:00000004
"Monitoring Enabled"=dword:00000001
"Location Type"=dword:00000001
"Guest Rights"=dword:00000001
AMT registry Fix.
Note: you will need to identify the next largest key value. In my example it was key 50
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\Inbox Source\Inbox Definitions\50]
"Inbox Name"="SMS_AMT_PROXY_COMPONENT"
"Relative Path"="inboxes\\amtproxy.box"
"NAL Path"=""
"User Rights"=dword:00000000
"Service Rights"=dword:00000004
"Monitoring Enabled"=dword:00000001
"Location Type"=dword:00000001
"Guest Rights"=dword:00000001
That’s it. Should be right as rain.
Mystery: A machine had received an advertisement that may or may not have restarted a workstation.
The requestor had the Advertisement ID from the machine but they couldn’t locate the advertisement in the console. For the sake of this mystery our advertisement will be MIS00042.
This mystery has two questions.
1. Where is the advertisement in the console?
2. Did the SMS Program restart the PC?
One
Where in the console is the advertisement? SMS 2003 does not have a search function like ConfigMgr 2007 however this method will work for either environment. There are two tables (not views) that will be helpful.
· Dbo.Folders
· Dbo.FolderMembers
Where in the console is the advert?
With SMS 2003 and ConfigMgr folders have become a very useful way to organize info in the console. As such we will need a method to search the FolderMembers for the appropriate parent folder.
SELECT dbo.Folders.Name, dbo.Folders.ParentContainerNodeID
FROM dbo.Folders INNER JOIN
dbo.FolderMembers ON dbo.FolderMembers.ContainerNodeID = dbo.Folders.ContainerNodeID
WHERE (dbo.FolderMembers.InstanceKey = 'MSI00042')
This will return two pieces of information. The first is the Name of the folder containing the Advertisement. The second is the ParentContainerNodeID. If the ParentContainerNodeID is zero then it is a top level folder. If the value is not zero, then you can query again basing your where statement on ContainerNodeID. With the Name of the folder your console spelunking will be much easier.
Two
Did this advertised program cause the workstation to restart? First we will assume that the package will not restart the workstation (that can be confirmed in the package run logs – outside the scope of this discussion). Second we need to check the program flags to see if SMS restarts the computer when the program has finished running bit is set.
Okay, where are the ProgramFlags? The program flags which can be found with just the AdvertisementID in the dbo.v_AdvertisementInfo view.
SELECT *
FROM dbo.v_AdvertisementInfo
WHERE (AdvertisementID = 'MSI00042')
You are looking for the ProgramFlags value. In this case it is -2012175360.
**********Hex, Binary and Decimal Aside*******************
In several Microsoft program values are calculated in Hex or Binary but stored in Decimal.
If you open up Calc.exe change it to scientific method you can type in the negative number and convert it to Hex (Hex button is the first from the left under the numerical field)
In this case when you change the decimal -2012175360 to hex you get FFFFFFFF8810A400. You can ignore the proceeding eight F’s. The Hex value is 8810A400.
If you open up Calc.exe change it to scientific method you can type in the negative number and convert it to Binary (Bin button is the fourth from the left under the numerical field)
In this case when you change the decimal -2012175360 to hex you get 1111111111111111111111111111111110001000000100001010010000000000.
**********/Aside*******************
Okay, that’s great so what? Well if you reference the SDK (see end of article for links) for SMS_Program. You’ll find the following Entry in Program Flags for bit 19:
|
bit 19 (0x00040000)
|
SMS restarts the computer when the program has finished running.
|
Notice it is both the binary Bit 19 (a one with 18 zeros after it) and the Hex value of 0X00040000. So those two methods above are going to be useful.
Okay, how do I check to see if the setting is there? You use the logical AND condition.
8810A400 & 40000 = 0 (or false) if the value returned was 40000 that would mean it is present.
1111111111111111111111111111111110001000000100001010010000000000
You may notice that the 19th bit is zero or false. If you do bitwise comparison you’ll get a value of zero.
Note: You can do the bitwise AND function in Calc.exe too. (button is under the clear - top right)
Note: To add a value to a string, use the OR function in either programming or Calc.exe.
Summary
We were able to find the Advertisement in a folder in the console. We were also able to prove that the program was not set to cause SMS to restart the workstation.
References
SMS 2003 SDK 3.1:
http://www.microsoft.com/downloads/details.aspx?FamilyId=58833CD1-6DBB-45BB-BB77-163446068EF6&displaylang=en
Configuration Manager 2007 SDK 4.0: http://www.microsoft.com/downloads/details.aspx?FamilyId=064A995F-EF13-4200-81AD-E3AF6218EDCC&displaylang=en
SMS 2003 SDK for SMS_Progam
Data type: uint32
Access type: Read/write
Qualifiers: Bits
Defines the installation characteristics of the program, such as whether this is an unattended install, the install restarts the computer, or the install runs in a minimized window. The default flags are USERCONTEXT, USEUNCPATH, and ANY_PLATFORM.
When using SMS_Program programmatically, ensure that no conflicting options are selected. For example, NOUSERLOGGEDIN and USERCONTEXT should not be used together.
Note
· Unlisted bits are either obsolete or unused by SMS.
|
Bit flag
|
Description
|
|
Bit 6 (0x00000020)
|
Disables MOM alerts while the program runs. Requires SMS 2003 SP1
|
|
Bit 7 (0x00000040)
|
Generates MOM alert if the program fails. Requires SMS 2003 SP1.
|
|
Bit 8 (0x00000080)
|
For Advanced Client only. If set, this program's immediate dependent should always be run.
|
|
Bit 9 (0x00000100)
|
Indicates a device program. If set, the program is not offered to desktop clients.
|
|
Bit 10 (0x00000200)
|
This program's immediate dependent should always be run.
|
|
Bit 11 (0x00000400)
|
The countdown dialog is not displayed.
|
|
Bit 12 (0x00000800)
|
The command requires Add Remove Programs to be restarted—for example, APASetup.exe.
|
|
Bit 13 (0x00001000)
|
The command is disabled by company policy—for example, no "Run from Network" support.
|
|
Bit 14 (0x00002000)
|
A user must be logged on for the program to run.
|
|
Bit 15 (0x00004000)
|
The program must be run as the local Administrator account.
|
|
Bit 16 (0x00008000)
|
The program is offered to each new user that logs on. If this bit is not set, the program is offered only to the first user that logs on.
|
|
Bit 17 (0x00010000)
|
The program must be run by every user for whom it is valid. Valid only for mandatory jobs.
|
|
Bit 18 (0x00020000)
|
The program is run only when no user is logged on.
|
|
bit 19 (0x00040000)
|
SMS restarts the computer when the program has finished running.
|
|
Bit 20 (0x00080000)
|
Use a UNC path (no drive letter) to access the distribution point.
|
|
Bit 21 (0x00100000)
|
Persists the connection to the drive specified in the DriveLetter property. The USEUNCPATH bit flag must not be set.
|
|
Bit 22 (0x00200000)
|
Run the program as a minimized window.
|
|
Bit 23 (0x00400000)
|
Run the program as a maximized window.
|
|
Bit 24 (0x00800000)
|
Hide the program window.
|
|
Bit 25 (0x01000000)
|
SMS logs off the user when the program has finished running.
|
|
Bit 26 (0x02000000)
|
The program runs using the Legacy Client Software Installation. This account is used for unattended installs and requires the UNATTENDED bit to be set. For information about this account, see the Microsoft Systems Management Server 2003 Concepts, Planning, and Deployment Guide. You can specify this account in the SMS Administrator console or programmatically by using the site control file.
|
|
Bit 27 (0x04000000)
|
The program runs on any platform; ignore the supported operating system field.
|
|
Bit 28 (0x08000000)
|
Notifies the user if the program exceeds the Duration time by more than 15 minutes.
|
To register a Dynamic Link Library (DLL) in Microsoft we use Regsvr32.exe to: LoadLibrary() is called to load the control into memory, GetProcAddress() is called to get the address of the DllRegisterServer() function, and then DllRegisterServer() is called to register the control. When working with a VBS script you have two methods of RegSvr32.exe: WMI example
REG = windir & "\system32\regsvr32.exe /s " & windir & "\system32\msxml3.dll"
Set oWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2:Win32_Process")
result = oWMIService.Create(REG , Null, Null, intProcessID)
WshShell.run example
reg = "cmd /C regsvr32.exe -s %windir%\system32\wbem\wmisvc.dll"
rc = WshShell.run(reg , 2, 1)
Regsvr32.exe usage and error messages
http://support.microsoft.com/kb/249873
Possible Reasons for OLE control Registration Failure
http://support.microsoft.com/kb/140346/
Run Method (Windows Script Host)
http://msdn.microsoft.com/en-us/library/d5fk67ky(VS.85).aspx