ClickOnce - Create from deployed package

Octopus.Script exported 2016-09-15 by Grendizr belongs to ‘ClickOnce’ category.

Create binaries manifest & CO application and sign them with given code sign certificate … using mage.exe.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Deploy step to read binaries from

DeployStepName

Name of the previous step used to deploy binaries that will be packed in CO package

Path to the directory where to deploy the ClickOnce package

DestinationPath = \\MyServer\MyClickOnceRepo\#{Octopus.Project.Name}\#{Octopus.Environment.Name}

Path to the target directory for the ClickOnce package. This will contain the created *.application file and the “Application Files” folder

Name of the target executable file

ExeFileName

Name of the executable file of the application to pack

Publisher name

Publisher = MyCompany

Publisher name to use when creating the CO package

Path to the certification file

SignCertFilePath = \\MyServer\Auth\cert\my-cert.pfx

Path to the certification pfx file

Password of the certification file

SignCertPassword =

null

Path to mage.exe

MageExePath = \\MyServer\Tools\Octopus\Tentacles\mage.exe

Path to mage.exe which is used to update manifest and .application files and sign them.

Icon filename

IconFile

Name of icon file in the package, eg. ApplicationIcon.ico

Application display name

DisplayName

Name which appears in the Start Menu

Script body

Steps based on this template will execute the following PowerShell script.

Write-Host "Building clickonce application ..."

function Validate-Parameter([REF]$f, $name, $value) {
    if (!$value) {
        throw ('Missing required value for parameter ''{0}''.' -f $name)
    }
    
    $f.Value = $value
    Write-Host "Parameters [$name] has been initialized with : [$value]"
}

### Parameters
$deployStepName = $null
$appName = $null
$exeFileName = $null
$destinationPath = $null
$certFilePath = $null
$certPassword = $null
$publisher = $null
$mageExe = $null
$version = $null
$binariesFolderPath = $null
$coAppName = $null
$iconFile = $null

Validate-Parameter ([REF]$deployStepName) 'Deploy step name to read binaries from' $OctopusParameters['DeployStepName']
Validate-Parameter ([REF]$appName) 'Project name' $OctopusParameters['Octopus.Project.Name']
Validate-Parameter ([REF]$coAppName) 'Application display name' $OctopusParameters['DisplayName']

Validate-Parameter ([REF]$exeFileName) 'Executable file name' $OctopusParameters['ExeFileName']
Validate-Parameter ([REF]$destinationPath) 'Path to the directory where to deploy the ClickOnce package' $OctopusParameters['DestinationPath']
Validate-Parameter ([REF]$certFilePath) 'Path to the certification file' $OctopusParameters['SignCertFilePath']
Validate-Parameter ([REF]$certPassword) 'Password of the certification file' $OctopusParameters['SignCertPassword']
Validate-Parameter ([REF]$publisher) 'Publisher name' $OctopusParameters['Publisher']
Validate-Parameter ([REF]$mageExe) 'Path to the mage.exe' $OctopusParameters['MageExePath']
Validate-Parameter ([REF]$iconFile) 'Icon file' $OctopusParameters['IconFile']

### end of parameters

Validate-Parameter ([REF]$version) 'Version number (from release)' $OctopusParameters['Octopus.Release.Number']

$binariesFolderParameter = -join("Octopus.Action[",$deployStepName,"].Output.Package.InstallationDirectoryPath")
Write-Host "Trying to get Installation folder parameter value for : [$binariesFolderParameter]"

$binariesFolderPath = $OctopusParameters[$binariesFolderParameter]
if(!$binariesFolderPath){
     throw ('Unable to retrieve binaries path from previous step execution for step with name ''{0}''.' -f $deployStepName)
}

$appVersionAndNumber = -join($appName, "_", $version)
$packageDestinationSubDirectory = -join ("Application_Files/", $appVersionAndNumber)
$packageDestinationPath = -join ($destinationPath, "/", $packageDestinationSubDirectory) 
$appManifestRelativePath = -join ("Application_Files/",$appVersionAndNumber, "/", $exeFileName, ".manifest")
$appManifestFilePath = -join ($binariesFolderPath, "/", $exeFileName, ".manifest")

$coAppFilePath = -join($binariesFolderPath, "\", $appName, ".application")
$coAppFilePathServer = -join($destinationPath, "\", $appName, ".application")

### Create Application manifest
Write-Host "Creating application manifest at "$appManifestFilePath
& $mageExe -New Application -t "$appManifestFilePath" -n "$coAppName" -v $version -p msil -fd "$binariesFolderPath" -tr FullTrust -a sha256RSA -if $iconFile
Write-Host "Signing application manifest ..."
& $mageExe -Sign "$appManifestFilePath" -cf $certFilePath -pwd $certPassword

### Create Deployment application
Write-Host "Creating CO application [$coAppName] at "$coAppFilePath
& $mageExe -New Deployment -t "$coAppFilePath" -n "$coAppName" -v $version -p msil -appm $appManifestFilePath -ip true -i true -um true -pub $publisher -pu "$coAppFilePathServer" -appc $appManifestRelativePath -a sha256RSA

Write-Host "Updating minimum version to force auto-update"
& $mageExe -Update $coAppFilePath -mv $version -pub $publisher -a sha256RSA

Write-Host "Changing expiration max age => before application startup (hacking xml) of "$coAppFilePath
$content = Get-Content $coAppFilePath
$content -replace "<expiration maximumAge=`"0`" unit=`"days`" />", "<beforeApplicationStartup />" | set-content $coAppFilePath

Write-Host "Signing CO application [$coAppName] ..."
& $mageExe -Sign "$coAppFilePath" -cf $certFilePath -pwd $certPassword


Write-Host "Copying binaries from "$binariesFolderPath
Write-Host "to destination "$packageDestinationPath

### Remove any existing files from the package destination folder
Remove-Item $packageDestinationPath -Recurse -ErrorAction SilentlyContinue

### Ensure target directory exists in order not to fail the copy
New-Item $packageDestinationPath -ItemType directory > $null

### Copy binaries to destination folder
Copy-Item $binariesFolderPath"/*" $packageDestinationPath -recurse -Force > $null
Copy-Item $coAppFilePath $destinationPath -Force > $null

Write-Host "Building clickonce application script completed."

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "1b7909be-4870-4f81-8957-8357b9342c0f",
  "Name": "ClickOnce - Create from deployed package",
  "Description": "Create binaries manifest & CO application and sign them with given code sign certificate ... using mage.exe.",
  "Version": 28,
  "ExportedAt": "2016-09-15T06:53:27.970+00:00",
  "ActionType": "Octopus.Script",
  "Author": "Grendizr",
  "Parameters": [
    {
      "Name": "DeployStepName",
      "Label": "Deploy step to read binaries from",
      "HelpText": "Name of the previous step used to deploy binaries that will be packed in CO package",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "StepName"
      }
    },
    {
      "Name": "DestinationPath",
      "Label": "Path to the directory where to deploy the ClickOnce package",
      "HelpText": "Path to the target directory for the ClickOnce package. This will contain the created *.application file and the \"Application Files\" folder",
      "DefaultValue": "\\\\MyServer\\MyClickOnceRepo\\#{Octopus.Project.Name}\\#{Octopus.Environment.Name}",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "ExeFileName",
      "Label": "Name of the target executable file",
      "HelpText": "Name of the executable file of the application to pack",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "Publisher",
      "Label": "Publisher name",
      "HelpText": "Publisher name to use when creating the CO package",
      "DefaultValue": "MyCompany",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "SignCertFilePath",
      "Label": "Path to the certification file",
      "HelpText": "Path to the certification pfx file",
      "DefaultValue": "\\\\MyServer\\Auth\\cert\\my-cert.pfx",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "SignCertPassword",
      "Label": "Password of the certification file",
      "HelpText": null,
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Name": "MageExePath",
      "Label": "Path to mage.exe",
      "HelpText": "Path to mage.exe which is used to update manifest and .application files and sign them.",
      "DefaultValue": "\\\\MyServer\\Tools\\Octopus\\Tentacles\\mage.exe",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "IconFile",
      "Label": "Icon filename",
      "HelpText": "Name of icon file in the package, eg. ApplicationIcon.ico",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "DisplayName",
      "Label": "Application display name",
      "HelpText": "Name which appears in the Start Menu",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.ScriptBody": "Write-Host \"Building clickonce application ...\"\n\nfunction Validate-Parameter([REF]$f, $name, $value) {\n    if (!$value) {\n        throw ('Missing required value for parameter ''{0}''.' -f $name)\n    }\n    \n    $f.Value = $value\n    Write-Host \"Parameters [$name] has been initialized with : [$value]\"\n}\n\n### Parameters\n$deployStepName = $null\n$appName = $null\n$exeFileName = $null\n$destinationPath = $null\n$certFilePath = $null\n$certPassword = $null\n$publisher = $null\n$mageExe = $null\n$version = $null\n$binariesFolderPath = $null\n$coAppName = $null\n$iconFile = $null\n\nValidate-Parameter ([REF]$deployStepName) 'Deploy step name to read binaries from' $OctopusParameters['DeployStepName']\nValidate-Parameter ([REF]$appName) 'Project name' $OctopusParameters['Octopus.Project.Name']\nValidate-Parameter ([REF]$coAppName) 'Application display name' $OctopusParameters['DisplayName']\n\nValidate-Parameter ([REF]$exeFileName) 'Executable file name' $OctopusParameters['ExeFileName']\nValidate-Parameter ([REF]$destinationPath) 'Path to the directory where to deploy the ClickOnce package' $OctopusParameters['DestinationPath']\nValidate-Parameter ([REF]$certFilePath) 'Path to the certification file' $OctopusParameters['SignCertFilePath']\nValidate-Parameter ([REF]$certPassword) 'Password of the certification file' $OctopusParameters['SignCertPassword']\nValidate-Parameter ([REF]$publisher) 'Publisher name' $OctopusParameters['Publisher']\nValidate-Parameter ([REF]$mageExe) 'Path to the mage.exe' $OctopusParameters['MageExePath']\nValidate-Parameter ([REF]$iconFile) 'Icon file' $OctopusParameters['IconFile']\n\n### end of parameters\n\nValidate-Parameter ([REF]$version) 'Version number (from release)' $OctopusParameters['Octopus.Release.Number']\n\n$binariesFolderParameter = -join(\"Octopus.Action[\",$deployStepName,\"].Output.Package.InstallationDirectoryPath\")\nWrite-Host \"Trying to get Installation folder parameter value for : [$binariesFolderParameter]\"\n\n$binariesFolderPath = $OctopusParameters[$binariesFolderParameter]\nif(!$binariesFolderPath){\n     throw ('Unable to retrieve binaries path from previous step execution for step with name ''{0}''.' -f $deployStepName)\n}\n\n$appVersionAndNumber = -join($appName, \"_\", $version)\n$packageDestinationSubDirectory = -join (\"Application_Files/\", $appVersionAndNumber)\n$packageDestinationPath = -join ($destinationPath, \"/\", $packageDestinationSubDirectory) \n$appManifestRelativePath = -join (\"Application_Files/\",$appVersionAndNumber, \"/\", $exeFileName, \".manifest\")\n$appManifestFilePath = -join ($binariesFolderPath, \"/\", $exeFileName, \".manifest\")\n\n$coAppFilePath = -join($binariesFolderPath, \"\\\", $appName, \".application\")\n$coAppFilePathServer = -join($destinationPath, \"\\\", $appName, \".application\")\n\n### Create Application manifest\nWrite-Host \"Creating application manifest at \"$appManifestFilePath\n& $mageExe -New Application -t \"$appManifestFilePath\" -n \"$coAppName\" -v $version -p msil -fd \"$binariesFolderPath\" -tr FullTrust -a sha256RSA -if $iconFile\nWrite-Host \"Signing application manifest ...\"\n& $mageExe -Sign \"$appManifestFilePath\" -cf $certFilePath -pwd $certPassword\n\n### Create Deployment application\nWrite-Host \"Creating CO application [$coAppName] at \"$coAppFilePath\n& $mageExe -New Deployment -t \"$coAppFilePath\" -n \"$coAppName\" -v $version -p msil -appm $appManifestFilePath -ip true -i true -um true -pub $publisher -pu \"$coAppFilePathServer\" -appc $appManifestRelativePath -a sha256RSA\n\nWrite-Host \"Updating minimum version to force auto-update\"\n& $mageExe -Update $coAppFilePath -mv $version -pub $publisher -a sha256RSA\n\nWrite-Host \"Changing expiration max age => before application startup (hacking xml) of \"$coAppFilePath\n$content = Get-Content $coAppFilePath\n$content -replace \"<expiration maximumAge=`\"0`\" unit=`\"days`\" />\", \"<beforeApplicationStartup />\" | set-content $coAppFilePath\n\nWrite-Host \"Signing CO application [$coAppName] ...\"\n& $mageExe -Sign \"$coAppFilePath\" -cf $certFilePath -pwd $certPassword\n\n\nWrite-Host \"Copying binaries from \"$binariesFolderPath\nWrite-Host \"to destination \"$packageDestinationPath\n\n### Remove any existing files from the package destination folder\nRemove-Item $packageDestinationPath -Recurse -ErrorAction SilentlyContinue\n\n### Ensure target directory exists in order not to fail the copy\nNew-Item $packageDestinationPath -ItemType directory > $null\n\n### Copy binaries to destination folder\nCopy-Item $binariesFolderPath\"/*\" $packageDestinationPath -recurse -Force > $null\nCopy-Item $coAppFilePath $destinationPath -Force > $null\n\nWrite-Host \"Building clickonce application script completed.\"\n",
    "Octopus.Action.Script.ScriptFileName": null,
    "Octopus.Action.Package.NuGetFeedId": null,
    "Octopus.Action.Package.NuGetPackageId": null
  },
  "Category": "ClickOnce",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/clickonce-from-deployed-package.json",
  "Website": "/step-templates/1b7909be-4870-4f81-8957-8357b9342c0f",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Thursday, September 15, 2016