Search code examples
windowswindows-installerchocolatey

How do I pass the install log path to an MSI in chocolatey?


In the chocolateyInstall.ps1 script this works and installs the package:

Install-ChocolateyPackage 'GoogleChrome' msi /qn /L*V $toolsDir\GoogleChrome.msi

This gives me an error:

Install-ChocolateyPackage 'GoogleChrome' msi /qn /L*V C:\Windows\temp\GoogleChrome_install.log $toolsDir\GoogleChrome.msi

 Attempt to use original download file name failed for 'C:\Windows\temp\GoogleChrome_install.log'.
Copying GoogleChrome
  from 'C:\Windows\temp\GoogleChrome_install.log'
Cannot find path 'C:\Windows\temp\GoogleChrome_install.log' because it does not exist.
ERROR: Chocolatey expected a file to be downloaded to 'C:\Users\Administrator\AppData\Local\Temp\2\chocolatey\GoogleChro
me\54.0.2840.71\GoogleChromeInstall.msi' but nothing exists at that location.
The install of googlechrome was NOT successful.
Error while running 'C:\ProgramData\chocolatey\lib\GoogleChrome\tools\chocolateyInstall.ps1'.
 See log for details.

Chocolatey installed 0/1 packages. 1 packages failed.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).

Solution

  • I would suggest running choco new (from the latest version of Chocolatey). The method you are calling and the way you are calling it is kind of outdated.

    You need to be passing your silent arguments all as one argument, right now it is splitting the argument up based on spaces:

    $silentArgs = "/qn /norestart /l*v `"$env:Temp\GoogleChrome_install.log`""
    Install-ChocolateyPackage 'GoogleChrome' msi $silentArgs $toolsDir\GoogleChrome.msi
    

    Here's what newer chocolateyInstall.ps1 files look like:

    $ErrorActionPreference = 'Stop'
    
    $packageName  = 'Google-Chrome'
    $toolsDir     = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
    $fileLocation = Join-Path $toolsDir 'GoogleChrome.msi'
    $fileLocation64 = Join-Path $toolsDir 'GoogleChrome64.msi'
    if (Get-ProcessorBits 64) {
    $forceX86 = $env:chocolateyForceX86
      if ($forceX86 -eq 'true') {
        Write-Debug "User specified '-x86' so forcing 32-bit"
      } else {
        $fileLocation = $fileLocation64
      }
    }
    
    $packageArgs = @{
      packageName   = $packageName
      softwareName  = 'Google Chrome*'
      file          = $fileLocation
      fileType      = 'msi'
      silentArgs    =  "/qn /norestart /l*v `"$env:Temp\GoogleChrome_install.log`""
      validExitCodes= @(0,1641,3010)
    }
    
    Install-ChocolateyInstallPackage @packageArgs