- Contents
Interaction Conference Administration Guide
Installing the Outlook Plugin using a Group Policy
Network administrators can optionally distribute the Interaction Conference Outlook Plugin installation file to client workstations instead of performing individual client workstation installations. A silent installation can provide this functionality. This topic explains how to distribute the .msi installation file across many workstations using a Visual Basic script in a network policy.
For more information about installing CIC workstation applications via group policy, see Group Policy Deployment for CIC Applications Technical Reference in the PureConnect Documentation Library.
A group policy script references the prerequisite installs and the Interaction Conference Outlook Plugin install, both of which must be accessible on a shared directory that all client workstations can access. If the workstation does not meet the requirements for the Interaction Conference Outlook plugin, the script can apply the installs to meet those requirements before proceeding to the Outlook Plugin install itself. Record the \\Server\InstallShareName information for both the prerequisite and primary installation programs. These server/share names are needed in the group policy script.
In the following sample script, it looks for the three essential requirements:
-
Microsoft Outlook (32-bit version only) – If not found, the script and installation program does not run.
-
Visual Studio Tools for Office version 4.0 - The install looks for version 10.0.31119 or newer. If you do not have CIC 4.0 SU3 installed, search the Microsoft website and download vstor_redist.exe to get the required installation program.
-
Microsoft Office 2010 Primary Interop Assemblies – Installs with o2010pia.msi
-
-
Create a Visual Basic script for the group policy to use. You can use the following script as a template or starting point, but you must customize it to fit your environment. You can copy and paste this script into Notepad as a starting point. Then edit the <PathToOutlookAddInShare> and <PathToWorkStationPreReqShare> placeholders and replace them with your local \\Servername\InstallShare names on your network.
'script to install version 4.x Interaction Conference plugins for Microsoft Outlook and pre-reqs
pluginShare="<PathToOutlookAddInShare>"
preReqShare="<PathToWorkStationPreReqShare>"
clientGUID="{0E65D294-C977-4420-B84E-D6CE2C850574}"
clientApp="MSOutlook_IConferencePlugins_20xx_Rx.msi"
interopProductCode="{90140000-1146-0000-0000-0000000FF1CE}"
interopInstall="o2010pia.msi"
officeRuntimeAgnosticInstall="vstor_redist.exe"
officeRuntime64Install="vstor40_x64.exe"
officeRuntime32Install="vstor40_x86.exe"
minVersion="10.0.31119"
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
Set WShell = Wscript.CreateObject("Wscript.Shell")
Set objShell = CreateObject("Shell.Application")
-
Const msiInstallStateLocal = 3
Const msiInstallStateDefault = 5
Const FILEVER_RC_F1_EQUAL_F2 = 0
Const FILEVER_RC_F1_LESS_THAN_F2 = -1
Const FILEVER_RC_F1_GREATER_THAN_F2 = 1
'creates a timestamp to make log name unique
timestamp=Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now)
'sets defaultTempDir to user temp directory
strTempDir = WShell.ExpandEnvironmentStrings("%temp%") & "\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objTextFile = fso.OpenTextFile(strTempDir & "\IConferencePluginsMSOutlook_script.log", 8, True)
logit("Script started " & Now())
numBits = GetBitness()
outlookInstalled=checkOutlook(numBits)
if outlookInstalled=true then
'checks pre-reqs
interopPreReqInstalled=checkPreReq(interopProductCode)
officeRuntimePreReqInstalled=checkVSTO(numBits)
agnosticOfficeRuntimeFound=fso.FileExists(preReqShare & "\" & officeRuntimeAgnosticInstall)
'Installs pre-reqs if needed
if interopPreReqInstalled=false then
logit("Microsoft Office 2010 Primary Interop Assemblies is not installed and is a pre-req. Installing Microsoft Office 2010 Primary Interop Assemblies")
InstallPath=preReqShare & "\" & interopInstall
commandline="msiexec /i " & InstallPath & " /l*vx %temp%\" & replace(interopInstall,".msi","_install_" & timestamp & ".log") & " /q REBOOT=R"
logit("Executing " & commandline)
r=wshell.run(commandline,0,true)
end if
'Installs VSTOR. Since the newer VSTOR is architecture agnostic, checks to see if that VSTOR is available and installs it.
'If the agnostic VSTOR is not available, then relies on the bitness of the system to install the correct VSTOR.
if officeRuntimePreReqInstalled=false then
logit("Microsoft Visual Studio 2010 Tools for Office Runtime is not installed and is a pre-req.")
if agnosticOfficeRuntimeFound=true then
logit("Universal Microsoft Visual Studio 2010 Tools for Office Runtime found. Installing Microsoft Visual Studio 2010 Tools for Office Runtime")
InstallPath=preReqShare & "\" & officeRuntimeAgnosticInstall
commandline=InstallPath & " /l*vx %temp%\" & replace(officeRuntimeAgnosticInstall,".exe","_install_" & timestamp & ".log") & " /q REBOOT=R"
logit("Executing " & commandline)
r=wshell.run(commandline,1,true)
elseif numBits="32" then
logit("Installing Microsoft Visual Studio 2010 Tools for Office Runtime (x86)")
InstallPath=preReqShare & "\" & officeRuntime32Install
commandline=InstallPath & " /l*vx %temp%\" & replace(officeRuntime32Install,".exe","_install_" & timestamp & ".log") & " /q REBOOT=R"
logit("Executing " & commandline)
r=wshell.run(commandline,1,true)
elseif numBits="64" then
logit("Installing Microsoft Visual Studio 2010 Tools for Office Runtime (x64)")
InstallPath=preReqShare & "\" & officeRuntime64Install
commandline=InstallPath & " /l*vx %temp%\" & replace(officeRuntime64Install,".exe","_install_" & timestamp & ".log") & " /q REBOOT=R"
logit("Executing " & commandline)
r=wshell.run(commandline,1,true)
end if
end if
'installs clientApp
InstallPath=pluginShare & "\" & clientApp
commandline="msiexec /i " & InstallPath & " /l*vx %temp%\" & replace(clientApp,".msi","_install_" & timestamp & ".log") & " /q"
logit("Executing " & commandline)
r=wshell.run(commandline,1,true)
end if
logit("Script completed" & vbcrlf & vbcrlf)
objTextFile.close
'writes message to logfile.
Function logit(strMessage)
objTextFile.Writeline FormatDateTime(Now(),vbLongTime) & vbtab & strMessage
End Function
function checkPreReq(productGUID)
If installer.ProductState(productGUID)=msiInstallStateLocal Or installer.ProductState(productGUID)=msiInstallStateDefault Then
checkPreReq=true
Else
checkPreReq=false
end if
End Function
'checks to see if Outlook is installed
Function checkOutlook(bitness)
Set oShellreg = CreateObject("WScript.Shell")
If bitness="32" Then sRegKey = "HKLM\SOFTWARE\Microsoft\Office\14.0\Outlook\InstallRoot\"
If bitness="64" Then sRegKey = "HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Outlook\InstallRoot\"
sRegValue = "" ' init value in case value does not exist
On Error Resume Next
sRegValue = oShellreg.RegRead(sRegKey & "Path")
On Error Goto 0
If sRegValue <> "" Then
checkOutlook=True
logit("Microsoft Outlook 2010 32-bit is installed.")
Else
checkOutlook=False
logit("Microsoft Outlook 2010 32-bit is not installed.")
End If
set oShellreg=nothing
End Function
'checks to see if VSTO is installed
Function checkVSTO(bitness)
Set oShellreg = CreateObject("WScript.Shell")
If bitness="32" Then sRegKey = "HKLM\SOFTWARE\Microsoft\VSTO Runtime Setup\v4R\"
If bitness="64" Then sRegKey = "HKLM\SOFTWARE\Wow6432Node\Microsoft\VSTO Runtime Setup\v4R\"
sRegValue = "" ' init value in case value does not exist
On Error Resume Next
sRegValue = oShellreg.RegRead(sRegKey & "Version")
On Error Goto 0
'compare retrieved value versus teh minimum required value
compResult=CompareFileVersions(sRegValue,minVersion)
If compResult=1 Or compResult=0 Then
checkVSTO=True
logit("VSTO version " & sRegValue & " meets requirement")
Else
checkVSTO=False
logit("VSTO version " & sRegValue & " does not meet requirement and will be installed.")
End If
set oShellreg=nothing
End Function
function CompareFileVersions(VerF1, VerF2)
'WScript.Echo "CompareFileVersions() """ & VerF1 & """ with """ & VerF2 & """"
' logit("CompareFileVersions() """ & VerF1 & """ with """ & VerF2 & """")
on error resume next
CompareFileVersions = FILEVER_RC_F1_EQUAL_F2
'-------- Split up the version numbers ------------------------------
dim VerBitsF1 : VerBitsF1 = split(VerF1, ".")
dim VerBitsF2 : VerBitsF2 = split(VerF2, ".")
'-------- How many "bits" are there (use largest of the two) --------
dim LastIndex : LastIndex = ubound(VerBitsF1)
if ubound(VerBitsF2) > LastIndex then
LastIndex = ubound(VerBitsF2)
end if
'-------- Work through each of the bits (probably 4) ----------------
dim i
for i = 0 to LastIndex
'--- Work out the 2 "bits" to compare (use "0" on shorter versions) ---
dim BitF1, BitF2
if i <= ubound(VerBitsF1) then BitF1 = VerBitsF1(i) else BitF1 = ""
if i <= ubound(VerBitsF2) then BitF2 = VerBitsF2(i) else BitF2 = ""
if BitF1 = "" then BitF1 = "0"
if BitF2 = "" then BitF2 = "0"
'-------- Compare the values (exit when mismatch found) ---------
' wscript.echo "Comparing level #" & i+1 & """: " & BitF1 & """ with """ & BitF2 & """"
if cint(BitF1) > cint(BitF2) then
' wscript.echo """" & BitF1 & """ is greater than """ & BitF2 & """"
CompareFileVersions = FILEVER_RC_F1_GREATER_THAN_F2
else
if cint(BitF1) < cint(BitF2) then
' wscript.echo """" & BitF1 & """ is less than """ & BitF2 & """"
CompareFileVersions = FILEVER_RC_F1_LESS_THAN_F2
end if
end if
if CompareFileVersions <> FILEVER_RC_F1_EQUAL_F2 then exit for
next
' wscript.echo "Compare answer is " & CompareFileVersions
end function
Function GetBitness()
Set WshShell = CreateObject("WScript.Shell")
Set WshProcEnv = WshShell.Environment("Process")
process_architecture= WshProcEnv("PROCESSOR_ARCHITECTURE")
If process_architecture = "x86" Then
system_architecture= WshProcEnv("PROCESSOR_ARCHITEW6432")
If system_architecture = "" Then
GetBitness="32"
logit("32-bit Operating System detected.")
End if
Else
GetBitness="64"
logit("64-bit Operating System detected.")
End If
End Function
-
The script must be configured to run as a machine policy with local administrator rights.
-
After the script is finished, you can check the installation log files in the user's %temp% folder on the workstation, to see the results of the installation.
Important: Always test this procedure for one or two client workstations before attempting to distribute the install to many workstations.