Skip to content

added 64bit support & vscode-insiders install support #1137

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 28, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 77 additions & 13 deletions scripts/Install-VSCode.ps1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<#PSScriptInfo

.VERSION 1.0
.VERSION 1.1

.GUID 539e5585-7a02-4dd6-b9a6-5dd288d0a5d0

Expand All @@ -25,6 +25,9 @@
.EXTERNALSCRIPTDEPENDENCIES

.RELEASENOTES
28/12/2017 - added functionality to support 64-bit versions of VSCode
& support for installation of VSCode Insiders Edition.
--
Initial release.
#>

Expand All @@ -44,6 +47,15 @@

https://github.com/PowerShell/vscode-powershell/blob/develop/scripts/Install-VSCode.ps1

.PARAMETER Architecture
A validated string defining the bit version to download. Values can be either 64-bit or 32-bit.
If 64-bit is chosen and the OS Architecture does not match, then the 32-bit build will be
downloaded instead. If parameter is not used, then 64-bit is used as default.

.PARAMETER BuildEdition
A validated string defining which build edition or "stream" to download - stable or
insiders edition. If the parameter is not used, then stable is downloaded as default.

.PARAMETER AdditionalExtensions
An array of strings that are the fully-qualified names of extensions to be
installed in addition to the PowerShell extension. The fully qualified
Expand All @@ -55,18 +67,28 @@
When present, causes Visual Studio Code to be launched as soon as installation
has finished.

.EXAMPLE
Install-VSCode.ps1 -Architecture 32-bit

Installs Visual Studio Code (32-bit) and the powershell extension.
.EXAMPLE
Install-VSCode.ps1 -LaunchWhenDone

Installs Visual Studio Code and the PowerShell extension and then launches
Installs Visual Studio Code (64-bit) and the PowerShell extension and then launches
the editor after installation completes.

.EXAMPLE
Install-VSCode.ps1 -AdditionalExtensions 'eamodio.gitlens', 'vscodevim.vim'

Installs Visual Studio Code, the PowerShell extension, and additional
Installs Visual Studio Code (64-bit), the PowerShell extension, and additional
extensions.

.EXAMPLE
Install-VSCode.ps1 -BuildEdition Insider -LaunchWhenDone

Installs Visual Studio Code Insiders Edition (64-bit) and then launches the editor
after installation completes.

.NOTES
This script is licensed under the MIT License:

Expand All @@ -92,6 +114,14 @@
#>
[CmdletBinding()]
param(
[parameter()]
[ValidateSet(,"64-bit","32-bit")]
[string]$Architecture = "64-bit",

[parameter()]
[ValidateSet("stable","insider")]
[string]$BuildEdition = "stable",

[Parameter()]
[ValidateNotNull()]
[string[]]$AdditionalExtensions = @(),
Expand All @@ -100,22 +130,56 @@ param(
)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if you added an Architecture parameter that defaults to 64bit but also allows a 32bit value. Then you could test the specific install path (either under Program Files or Program Files (x86) and download the specified bit-version to install.

Copy link
Contributor Author

@tabs-not-spaces tabs-not-spaces Dec 28, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep - easy inclusion. I'll add it now.

Another option would be to simply install based on a OSArchitecture check - but if the goal is to allow custom installs, then I suppose it's better to give the end user the option to chose arch?


if (!($IsLinux -or $IsOSX)) {

$codeCmdPath = "C:\Program Files (x86)\Microsoft VS Code\bin\code.cmd"

switch ($Architecture) {
"64-bit" {
if ((Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -eq "64-bit") {
$codePath = $env:ProgramFiles
$bitVersion = "win32-x64"
}
else {
$codePath = $env:ProgramFiles
$bitVersion = "win32"
$Architecture = "32-bit"
}
break;
}
"32-bit" {
if ((Get-CimInstance -ClassName Win32_OperatingSystem).OSArchitecture -eq "32-bit"){
$codePath = $env:ProgramFiles
$bitVersion = "win32"
}
else {
$codePath = ${env:ProgramFiles(x86)}
$bitVersion = "win32"
}
break;
}
}
switch ($BuildEdition) {
"Stable" {
$codeCmdPath = "$codePath\Microsoft VS Code\bin\code.cmd"
$appName = "Visual Studio Code ($($Architecture))"
break;
}
"Insider" {
$codeCmdPath = "$codePath\Microsoft VS Code Insiders\bin\code-insiders.cmd"
$appName = "Visual Studio Code - Insiders Edition ($($Architecture))"
break;
}
}
try {
$ProgressPreference = 'SilentlyContinue'

if (!(Test-Path $codeCmdPath)) {
Write-Host "`nDownloading latest stable Visual Studio Code..." -ForegroundColor Yellow
Remove-Item -Force $env:TEMP\vscode-stable.exe -ErrorAction SilentlyContinue
Invoke-WebRequest -Uri https://vscode-update.azurewebsites.net/latest/win32/stable -OutFile $env:TEMP\vscode-stable.exe
Write-Host "`nDownloading latest $appName..." -ForegroundColor Yellow
Remove-Item -Force "$env:TEMP\vscode-$($BuildEdition).exe" -ErrorAction SilentlyContinue
Invoke-WebRequest -Uri "https://vscode-update.azurewebsites.net/latest/$($bitVersion)/$($BuildEdition)" -OutFile "$env:TEMP\vscode-$($BuildEdition).exe"

Write-Host "`nInstalling Visual Studio Code..." -ForegroundColor Yellow
Start-Process -Wait $env:TEMP\vscode-stable.exe -ArgumentList /silent, /mergetasks=!runcode
Write-Host "`nInstalling $appName..." -ForegroundColor Yellow
Start-Process -Wait "$env:TEMP\vscode-$($BuildEdition).exe" -ArgumentList /silent, /mergetasks=!runcode
}
else {
Write-Host "`nVisual Studio Code is already installed." -ForegroundColor Yellow
Write-Host "`n$appName is already installed." -ForegroundColor Yellow
}

$extensions = @("ms-vscode.PowerShell") + $AdditionalExtensions
Expand All @@ -125,7 +189,7 @@ if (!($IsLinux -or $IsOSX)) {
}

if ($LaunchWhenDone) {
Write-Host "`nInstallation complete, starting Visual Studio Code...`n`n" -ForegroundColor Green
Write-Host "`nInstallation complete, starting $appName...`n`n" -ForegroundColor Green
& $codeCmdPath
}
else {
Expand Down