Feedback

  • Contents
 

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

    1. 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

  1. The script must be configured to run as a machine policy with local administrator rights.

  2. 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.