Applying a MSP to MSI that is already deployed.
Hi all,
I have a package that is already deployed to a number of PC's. I need to apply this MSP I have now and was wondering what is the best why to do this. As GPO does not handle MSP, I was thinking of creating a MSI, add in the MSP in to a temp directory and when it is on the users PC then run a script to install that patch.
Will this work, or any other ways of doing this that is easier would be great.
Thanks all
TG
I have a package that is already deployed to a number of PC's. I need to apply this MSP I have now and was wondering what is the best why to do this. As GPO does not handle MSP, I was thinking of creating a MSI, add in the MSP in to a temp directory and when it is on the users PC then run a script to install that patch.
Will this work, or any other ways of doing this that is easier would be great.
Thanks all
TG
0 Comments
[ + ] Show comments
Answers (5)
Please log in to answer
Posted by:
Thegunner
18 years ago
Posted by:
fosteky
18 years ago
What has worked perfectly for me in the past:
Write a VB script that exits quickly if the patch has already been deployed to the target system (by checking for a reg setting, folder or file that's unique to the patched application). If the patch hasn't been applied to the target then the script uses msiexec to patch the installed MSI. Finally, apply this VB script as a Logon script of the same GPO that deploys the full MSI.
Here's an example of my VB script I used to patch an already deployed MSI. The FlagFolder is the thing that's unique to the patched installation, you'd have to modify this if you check against a registry or file. This script also writes a detailed report to the appevent log. Hope this helps:
disclaimer: You have a royalty-free right to use, modify, reproduce, and distribute this script file in any way you find useful, provided that you agree that the author has no warranty, obligations, or liability for such use.
Option explicit
On error resume next
dim oShell, oFSO
dim sMSILaunch, sAppEventText, sDate
'Adjust the following constants for desired results
const sGPOname = "APP .NET Framework 1.1 - C"
const sVBScriptName = "dotNET1.1_MSP_KB839424.VBS"
const sMSIEXEC = "%comspec% /c %Windir%\System32\msiexec.exe "
const sPatchSwitch = "/P "
const sMSP = "\\server\share\NetFramework11\NDP1.1-KB839424-X86.msp "
const sQuietSwitch = "/qn "
const sFlagFolder = "%Windir%\Microsoft.NET\Framework\v1.1.4322\Updates\M839424"
'Reference *************************************************************************
'Windows Scripting Host Object connections
Set oSHELL = WScript.CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
sMSILaunch = sMSIEXEC & sPatchSwitch & sMSP & sQuietSwitch
sAppEventText = "Starting " & sVBScriptName & chr(10) & "which is a " &_
"startup script of the GPO: " & chr(10) & sGPOname & chr(10)
'Worker and Output Section *********************************************************
If oFSO.FolderExists(sFlagFolder) = False Then
sAppEventText = sAppEventText & "The folder " & chr(34) & sFlagFolder & chr(34) &_
" doesn't exist, which indicates that the patch, " & chr(34) & sMSP & chr(34) &_
" is needed." & chr(10) & "The following MSIEXEC command will be run:" & chr(10) &_
sMSILaunch & chr(10) & "* see subsequent MSIInstaller event for details. End of script."
oSHELL.LogEvent 4, sAppEventText
oSHELL.run sMSILaunch, 0, True
wscript.quit
Else
sAppEventText = sAppEventText & "The folder " & chr(34) & sFlagFolder & chr(34) &_
" exists, indicating patch is already applied. No action will be taken. End of script."
oSHELL.LogEvent 4, sAppEventText
wscript.quit
End If
Write a VB script that exits quickly if the patch has already been deployed to the target system (by checking for a reg setting, folder or file that's unique to the patched application). If the patch hasn't been applied to the target then the script uses msiexec to patch the installed MSI. Finally, apply this VB script as a Logon script of the same GPO that deploys the full MSI.
Here's an example of my VB script I used to patch an already deployed MSI. The FlagFolder is the thing that's unique to the patched installation, you'd have to modify this if you check against a registry or file. This script also writes a detailed report to the appevent log. Hope this helps:
disclaimer: You have a royalty-free right to use, modify, reproduce, and distribute this script file in any way you find useful, provided that you agree that the author has no warranty, obligations, or liability for such use.
Option explicit
On error resume next
dim oShell, oFSO
dim sMSILaunch, sAppEventText, sDate
'Adjust the following constants for desired results
const sGPOname = "APP .NET Framework 1.1 - C"
const sVBScriptName = "dotNET1.1_MSP_KB839424.VBS"
const sMSIEXEC = "%comspec% /c %Windir%\System32\msiexec.exe "
const sPatchSwitch = "/P "
const sMSP = "\\server\share\NetFramework11\NDP1.1-KB839424-X86.msp "
const sQuietSwitch = "/qn "
const sFlagFolder = "%Windir%\Microsoft.NET\Framework\v1.1.4322\Updates\M839424"
'Reference *************************************************************************
'Windows Scripting Host Object connections
Set oSHELL = WScript.CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
sMSILaunch = sMSIEXEC & sPatchSwitch & sMSP & sQuietSwitch
sAppEventText = "Starting " & sVBScriptName & chr(10) & "which is a " &_
"startup script of the GPO: " & chr(10) & sGPOname & chr(10)
'Worker and Output Section *********************************************************
If oFSO.FolderExists(sFlagFolder) = False Then
sAppEventText = sAppEventText & "The folder " & chr(34) & sFlagFolder & chr(34) &_
" doesn't exist, which indicates that the patch, " & chr(34) & sMSP & chr(34) &_
" is needed." & chr(10) & "The following MSIEXEC command will be run:" & chr(10) &_
sMSILaunch & chr(10) & "* see subsequent MSIInstaller event for details. End of script."
oSHELL.LogEvent 4, sAppEventText
oSHELL.run sMSILaunch, 0, True
wscript.quit
Else
sAppEventText = sAppEventText & "The folder " & chr(34) & sFlagFolder & chr(34) &_
" exists, indicating patch is already applied. No action will be taken. End of script."
oSHELL.LogEvent 4, sAppEventText
wscript.quit
End If
Posted by:
fosteky
18 years ago
AngelD's suggestion is sound, but obviously necessitates the uninstall and reinstall of the application for all users, which may not be desirable should you have a lot of users and the package is sizeable.
I only suggest running the patch against the workstation installations because it avoids the need to uninstall and reinstall the app on all target computers.
I only suggest running the patch against the workstation installations because it avoids the need to uninstall and reinstall the app on all target computers.
Posted by:
vrapp
18 years ago
I think the problem with applying the patch by script is that after the patch, in add/remove programs it still shows the previous version. I just applied msp patch to adobe reader, and though the reader itself is now 7.0.8, in add/remove programs it's still 7.0.7 (in the title of the product; in the version, it is now correctly 7.0.8).
Also, what if the installation is managed (published or advertised)? then you obviously have to update the administrative share as well, for the future installations; which will put it out of sync with the existing installations, so if someone wants to uninstall, he may be unable to. I did not try it, but I think it is very likely.
Also, what if the installation is managed (published or advertised)? then you obviously have to update the administrative share as well, for the future installations; which will put it out of sync with the existing installations, so if someone wants to uninstall, he may be unable to. I did not try it, but I think it is very likely.
Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
so that the conversation will remain readable.