Microsoft Enterprise Platforms Support: Windows Server Core Team
EPS Team Blogs
Product Team Blogs
Hello, my name is Emmers Presson. I am a Support Escalation Engineer for Microsoft in the Windows Core team.
The purpose of this blog is to give you the steps to install a hotfix (or any other “package”) on the currently running operating system using the Deployment Image Servicing and Management (DISM) command. DISM is a new command-line tool that comes built-in for Windows 7 and Windows Server 2008 is the DISM tool. DISM combines the functions of multiple tools from the Windows Automated Installation Kit (WAIK) and allows users to perform multiple actions on operating system images. For the most part, this involves viewing and manipulating “offline images” which are in the Windows Imaging (WIM) file format. Here is a good reference that explains the function of the DISM tool and what the DISM tool is meant to replace:
There are also some DISM commands that target the running operating system (“online”). For example, you can use the following command to list the “packages” installed:
dism /online /get-packages /format:table
The command-line switch to install a package is “/Add-Package.” Let’s say that you are running Windows Server 2008 R2 Enterprise and you want to install the hotfix KB976571. When you download the hotfix file, the file name is “Windows6.1-KB976571-v2-x64.msu.” When you look at the DISM syntax in online help, you would assume that following syntax would work:
DISM.exe /Online /Add-Package /PackagePath:c:\kb976571\Windows6.1-KB976571-v2-x64.msu
where the .MSU file is stored in the c:\kb976571 folder.
Here is the screenshot of the results:
You will see the following snippet if you review the file c:\windows\logs\dism\dism.log:
2010-09-02 20:33:58, Info DISM DISM Package Manager: PID=7116 Encountered the option "packagepath" with value "c:\kb976571\Windows6.1-KB976571-v2-x64.msu" - CPackageManagerCLIHandler::Private_GetPackagesFromCommandLine
2010-09-02 20:33:58, Error DISM DISM Package Manager: PID=7116 DISM does not support installing MSU files online. - CMsuPackage::Install(hr:0x80070032)
Based on these results, you may wonder if you can really install packages online and if so, what type of file must you use if you can’t use MSU files? The answer is found in defining what a Microsoft Update Standalone Package (MSU) file is and how you would do this in the previous command-line tool, Package Manager (Pkgmgr.exe).
You had to extract the contents of a MSU file and instead use the .CAB file of the package in order to install or uninstall using the Package Manager tool (http://support.microsoft.com/default.aspx?scid=kb;EN-US;940410).
So try this approach:
1. Create a c:\temp\976571 folder.
2. Use the following command to extract the contents of the MSU file:
Expand –F:* c:\kb976571\Windows6.1-KB976571-v2-x64.msu c:\temp\976571
This resulted in extracting multiple files, which included the Windows6.1-KB976571-v2-x64.cab file.
Now try the following command:
DISM.exe /Online /Add-Package /PackagePath:c:\temp\976571\Windows6.1-KB976571-v2-x64.cab
This time I see the following:
You could tweak the command. For example, use the following syntax to install the package silently and avoid restarting Windows:
start /wait DISM.exe /Online /Add-Package /PackagePath:c:\temp\976571\Windows6.1-KB976571-v2-x64.cab /Quiet /NoRestart
You could use a similar command to uninstall an update using DISM. Here’s the syntax for that:
DISM.exe /Online /Remove-Package /PackagePath:c:\temp\976571\Windows6.1-KB976571-v2-x64.cab
I hope you find this helpful and explore other options for the DISM command-line tool.
Emmers Presson Support Escalation Engineer Microsoft Enterprise Platforms Support
Good rundown Emmers.
I've used this method to install IE offline, except that I point the PackagePath to the XML file (answerfile) in the expanded source. It works well. Fast and avoids a reboot.
Can you explain why OS service packs cannot be installed using MSU technology? That is, why can't service packs be installed offline?
One more off topic question. DISM can do many imaging and deployment related tasks, except that it cannot create catalog (.clg) files. This prevents the entire build process being automated, as modifying an offline image would require a new catalog file be created. Any chance of a /make-catalog switch in a future DISM update?
Might I ask how to install LDR (QFE) hotfix service branches from the command line using DISM?
I'll admit I'm afraid of DISM syntax, so I use something like "pkgmgr /ip /m:update-bf.mum /log:pkgmgr_x64" after expanding the CAB file inside the MSU package.
I know that the use of pkgmgr is deprecated and it is actually shimmed to call DISM. However even the DISM logs look scary ;-o
What stops you from going the same approach with DISM?
Dism.exe /online /add-package /packagepath:"C:\Users\i0028l\Downloads\update-bf.mum"
This works perfectly for me.
Very clear post.
May I ask if it is possible through DISM (or through other tools) to list all files that are changed for an hotfix?
Not with dism, but you can use standard “double expand” approach or a tool like CBS Package Inspector (archive.msdn.microsoft.com/packageinspector). The latter is designed specifically for Windows Embedded, but since the Component stack is the same, it works for regular Windows packages just fine.
Very useful post. I had tried the same thing than you (just put .MSU in a folder and try to call DISM to install), but didn't found the file. Now works fine after expanding.
Please could you tell me how to uninstall a package installed in this way, if you no longer have the file in the Temp Directory?
Well, how about this?
.\Dism.exe /Online /Remove-Package /PackageName:"Package_for_KB1234567~31bf3856ad364e35~amd64~~188.8.131.52"
The list of installed packages and their respective names can be obtained by running
.\Dism.exe /Online /Get-Packages
Can we extract multiple MSU file to cab? I mean if you have 100 updates then you not need to write command 100 times.
I get error (0x800f0902) (CBS busy) on sequenced DISM-calls. What could be the reason?
I cannot use "cmd.exe /c START /WAIT", because I need the return values.
For multiple MSUs
Download MSU files manually from microsoft download centre.
Extract the cab files using:
Expand -F:* [MSUs folder\*] [CAB destination folder]
Install using DISM using:
DISM /online /add-package /packagepath:[CAB destination folder]
thanks a lot...
I followed all the steps and I still get an error. I'm running a w2k8 r2 esx 5.1 vm receiving the scecli error event 1201 no mapping between account names error. Hotfix KB974639 is suppose to fix this. Its a .msu file. After following all of the above steps I receive an error 0x800f081e The specified package is not applicable to this image. Any ideas what I may have missed.
Clear and useful