parent
43f7c54fb8
commit
be2f67f206
79
dnvm.ps1
79
dnvm.ps1
|
|
@ -59,7 +59,7 @@ function _WriteOut {
|
||||||
|
|
||||||
### Constants
|
### Constants
|
||||||
$ProductVersion="1.0.0"
|
$ProductVersion="1.0.0"
|
||||||
$BuildVersion="beta4-10346"
|
$BuildVersion="beta4-10347"
|
||||||
$Authors="Microsoft Open Technologies, Inc."
|
$Authors="Microsoft Open Technologies, Inc."
|
||||||
|
|
||||||
# If the Version hasn't been replaced...
|
# If the Version hasn't been replaced...
|
||||||
|
|
@ -88,6 +88,8 @@ Set-Variable -Option Constant "OldUserHomes" @("%USERPROFILE%\.kre","%USERPROFIL
|
||||||
Set-Variable -Option Constant "DefaultUserHome" "%USERPROFILE%\$DefaultUserDirectoryName"
|
Set-Variable -Option Constant "DefaultUserHome" "%USERPROFILE%\$DefaultUserDirectoryName"
|
||||||
Set-Variable -Option Constant "HomeEnvVar" "DNX_HOME"
|
Set-Variable -Option Constant "HomeEnvVar" "DNX_HOME"
|
||||||
|
|
||||||
|
Set-Variable -Option Constant "RuntimeShortFriendlyName" "DNX"
|
||||||
|
|
||||||
Set-Variable -Option Constant "AsciiArt" @"
|
Set-Variable -Option Constant "AsciiArt" @"
|
||||||
___ _ ___ ____ ___
|
___ _ ___ ____ ___
|
||||||
/ _ \/ |/ / | / / |/ /
|
/ _ \/ |/ / | / / |/ /
|
||||||
|
|
@ -337,7 +339,12 @@ function Write-Alias {
|
||||||
[Parameter(Mandatory=$false)][string]$Architecture,
|
[Parameter(Mandatory=$false)][string]$Architecture,
|
||||||
[Parameter(Mandatory=$false)][string]$Runtime)
|
[Parameter(Mandatory=$false)][string]$Runtime)
|
||||||
|
|
||||||
$runtimeFullName = Get-RuntimeName $Version $Architecture $Runtime
|
# If the first character is non-numeric, it's a full runtime name
|
||||||
|
if(![Char]::IsDigit($Version[0])) {
|
||||||
|
$runtimeFullName = $Version
|
||||||
|
} else {
|
||||||
|
$runtimeFullName = Get-RuntimeName $Version $Architecture $Runtime
|
||||||
|
}
|
||||||
$aliasFilePath = Join-Path $AliasesDir "$Name.txt"
|
$aliasFilePath = Join-Path $AliasesDir "$Name.txt"
|
||||||
$action = if (Test-Path $aliasFilePath) { "Updating" } else { "Setting" }
|
$action = if (Test-Path $aliasFilePath) { "Updating" } else { "Setting" }
|
||||||
|
|
||||||
|
|
@ -453,15 +460,45 @@ function Download-Package(
|
||||||
$url = "$Feed/package/" + (Get-RuntimeId $Architecture $Runtime) + "/" + $Version
|
$url = "$Feed/package/" + (Get-RuntimeId $Architecture $Runtime) + "/" + $Version
|
||||||
|
|
||||||
_WriteOut "Downloading $runtimeFullName from $feed"
|
_WriteOut "Downloading $runtimeFullName from $feed"
|
||||||
|
|
||||||
$wc = New-Object System.Net.WebClient
|
$wc = New-Object System.Net.WebClient
|
||||||
Apply-Proxy $wc -Proxy:$Proxy
|
|
||||||
_WriteDebug "Downloading $url ..."
|
|
||||||
try {
|
try {
|
||||||
$wc.DownloadFile($url, $DestinationFile)
|
Apply-Proxy $wc -Proxy:$Proxy
|
||||||
} catch {
|
_WriteDebug "Downloading $url ..."
|
||||||
$Script:ExitCode = $ExitCodes.NoSuchPackage
|
|
||||||
throw "Could not find $runtimeFullName.$Version on feed: $Feed"
|
Register-ObjectEvent $wc DownloadProgressChanged -SourceIdentifier WebClient.ProgressChanged -action {
|
||||||
|
$Global:downloadData = $eventArgs
|
||||||
|
} | Out-Null
|
||||||
|
|
||||||
|
Register-ObjectEvent $wc DownloadFileCompleted -SourceIdentifier WebClient.ProgressComplete -action {
|
||||||
|
$Global:downloadData = $eventArgs
|
||||||
|
$Global:downloadCompleted = $true
|
||||||
|
} | Out-Null
|
||||||
|
|
||||||
|
$wc.DownloadFileAsync($url, $DestinationFile)
|
||||||
|
|
||||||
|
while(-not $Global:downloadCompleted){
|
||||||
|
$percent = $Global:downloadData.ProgressPercentage
|
||||||
|
$totalBytes = $Global:downloadData.TotalBytesToReceive
|
||||||
|
$receivedBytes = $Global:downloadData.BytesReceived
|
||||||
|
If ($percent -ne $null) {
|
||||||
|
Write-Progress -Activity ("Downloading $RuntimeShortFriendlyName from $url") `
|
||||||
|
-Status ("Downloaded $($Global:downloadData.BytesReceived) of $($Global:downloadData.TotalBytesToReceive) bytes") `
|
||||||
|
-PercentComplete $percent -Id 2 -ParentId 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($Global:downloadData.Error){
|
||||||
|
throw "Unable to download package: {0}" -f $Global:downloadData.Error.Message
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Progress -Activity ("Downloading $RuntimeShortFriendlyName from $url") -Id 2 -ParentId 1 -Completed
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
Remove-Variable downloadData -Scope "Global"
|
||||||
|
Remove-Variable downloadCompleted -Scope "Global"
|
||||||
|
Unregister-Event -SourceIdentifier WebClient.ProgressChanged
|
||||||
|
Unregister-Event -SourceIdentifier WebClient.ProgressComplete
|
||||||
|
$wc.Dispose()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -597,7 +634,7 @@ function Ngen-Library(
|
||||||
$ngenCmds += "$ngenExe install $($bin.FullName);"
|
$ngenCmds += "$ngenExe install $($bin.FullName);"
|
||||||
}
|
}
|
||||||
|
|
||||||
$ngenProc = Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList "-ExecutionPolicy unrestricted & $ngenCmds" -Wait -PassThru
|
$ngenProc = Start-Process "$psHome\powershell.exe" -Verb runAs -ArgumentList "-ExecutionPolicy unrestricted & $ngenCmds" -Wait -PassThru -WindowStyle Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
function Is-Elevated() {
|
function Is-Elevated() {
|
||||||
|
|
@ -859,7 +896,7 @@ function dnvm-upgrade {
|
||||||
[Parameter(Mandatory=$false)]
|
[Parameter(Mandatory=$false)]
|
||||||
[switch]$Ngen)
|
[switch]$Ngen)
|
||||||
|
|
||||||
dnvm-install "latest" -Alias:$Alias -Architecture:$Architecture -Runtime:$Runtime -Force:$Force -Proxy:$Proxy -NoNative:$NoNative -Ngen:$Ngen
|
dnvm-install "latest" -Alias:$Alias -Architecture:$Architecture -Runtime:$Runtime -Force:$Force -Proxy:$Proxy -NoNative:$NoNative -Ngen:$Ngen -Persistent:$true
|
||||||
}
|
}
|
||||||
|
|
||||||
<#
|
<#
|
||||||
|
|
@ -883,6 +920,8 @@ function dnvm-upgrade {
|
||||||
Skip generation of native images
|
Skip generation of native images
|
||||||
.PARAMETER Ngen
|
.PARAMETER Ngen
|
||||||
For CLR flavor only. Generate native images for runtime libraries on Desktop CLR to improve startup time. This option requires elevated privilege and will be automatically turned on if the script is running in administrative mode. To opt-out in administrative mode, use -NoNative switch.
|
For CLR flavor only. Generate native images for runtime libraries on Desktop CLR to improve startup time. This option requires elevated privilege and will be automatically turned on if the script is running in administrative mode. To opt-out in administrative mode, use -NoNative switch.
|
||||||
|
.PARAMETER Persistent
|
||||||
|
Make the installed runtime useable across all processes run by the current user
|
||||||
.DESCRIPTION
|
.DESCRIPTION
|
||||||
A proxy can also be specified by using the 'http_proxy' environment variable
|
A proxy can also be specified by using the 'http_proxy' environment variable
|
||||||
|
|
||||||
|
|
@ -917,7 +956,10 @@ function dnvm-install {
|
||||||
[switch]$NoNative,
|
[switch]$NoNative,
|
||||||
|
|
||||||
[Parameter(Mandatory=$false)]
|
[Parameter(Mandatory=$false)]
|
||||||
[switch]$Ngen)
|
[switch]$Ngen,
|
||||||
|
|
||||||
|
[Parameter(Mandatory=$false)]
|
||||||
|
[switch]$Persistent)
|
||||||
|
|
||||||
if(!$VersionNuPkgOrAlias) {
|
if(!$VersionNuPkgOrAlias) {
|
||||||
_WriteOut "A version, nupkg path, or the string 'latest' must be provided."
|
_WriteOut "A version, nupkg path, or the string 'latest' must be provided."
|
||||||
|
|
@ -927,6 +969,7 @@ function dnvm-install {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($VersionNuPkgOrAlias -eq "latest") {
|
if ($VersionNuPkgOrAlias -eq "latest") {
|
||||||
|
Write-Progress -Activity "Installing runtime" "Determining latest runtime" -Id 1
|
||||||
$VersionNuPkgOrAlias = Find-Latest $Runtime $Architecture
|
$VersionNuPkgOrAlias = Find-Latest $Runtime $Architecture
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -936,6 +979,7 @@ function dnvm-install {
|
||||||
if(!(Test-Path $VersionNuPkgOrAlias)) {
|
if(!(Test-Path $VersionNuPkgOrAlias)) {
|
||||||
throw "Unable to locate package file: '$VersionNuPkgOrAlias'"
|
throw "Unable to locate package file: '$VersionNuPkgOrAlias'"
|
||||||
}
|
}
|
||||||
|
Write-Progress -Activity "Installing runtime" "Parsing package file name" -Id 1
|
||||||
$runtimeFullName = [System.IO.Path]::GetFileNameWithoutExtension($VersionNuPkgOrAlias)
|
$runtimeFullName = [System.IO.Path]::GetFileNameWithoutExtension($VersionNuPkgOrAlias)
|
||||||
$Architecture = Get-PackageArch $runtimeFullName
|
$Architecture = Get-PackageArch $runtimeFullName
|
||||||
$Runtime = Get-PackageRuntime $runtimeFullName
|
$Runtime = Get-PackageRuntime $runtimeFullName
|
||||||
|
|
@ -974,14 +1018,17 @@ function dnvm-install {
|
||||||
New-Item -Type Directory $UnpackFolder | Out-Null
|
New-Item -Type Directory $UnpackFolder | Out-Null
|
||||||
|
|
||||||
if($IsNuPkg) {
|
if($IsNuPkg) {
|
||||||
|
Write-Progress -Activity "Installing runtime" "Copying package" -Id 1
|
||||||
_WriteDebug "Copying local nupkg $VersionNuPkgOrAlias to $DownloadFile"
|
_WriteDebug "Copying local nupkg $VersionNuPkgOrAlias to $DownloadFile"
|
||||||
Copy-Item $VersionNuPkgOrAlias $DownloadFile
|
Copy-Item $VersionNuPkgOrAlias $DownloadFile
|
||||||
} else {
|
} else {
|
||||||
# Download the package
|
# Download the package
|
||||||
|
Write-Progress -Activity "Installing runtime" "Downloading runtime" -Id 1
|
||||||
_WriteDebug "Downloading version $VersionNuPkgOrAlias to $DownloadFile"
|
_WriteDebug "Downloading version $VersionNuPkgOrAlias to $DownloadFile"
|
||||||
Download-Package $PackageVersion $Architecture $Runtime $DownloadFile -Proxy:$Proxy
|
Download-Package $PackageVersion $Architecture $Runtime $DownloadFile -Proxy:$Proxy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Write-Progress -Activity "Installing runtime" "Unpacking runtime" -Id 1
|
||||||
Unpack-Package $DownloadFile $UnpackFolder
|
Unpack-Package $DownloadFile $UnpackFolder
|
||||||
|
|
||||||
New-Item -Type Directory $RuntimeFolder -Force | Out-Null
|
New-Item -Type Directory $RuntimeFolder -Force | Out-Null
|
||||||
|
|
@ -991,12 +1038,13 @@ function dnvm-install {
|
||||||
_WriteDebug "Cleaning temporary directory $UnpackFolder"
|
_WriteDebug "Cleaning temporary directory $UnpackFolder"
|
||||||
Remove-Item $UnpackFolder -Force | Out-Null
|
Remove-Item $UnpackFolder -Force | Out-Null
|
||||||
|
|
||||||
dnvm-use $PackageVersion -Architecture:$Architecture -Runtime:$Runtime
|
dnvm-use $PackageVersion -Architecture:$Architecture -Runtime:$Runtime -Persistent:$Persistent
|
||||||
|
|
||||||
if ($Runtime -eq "clr") {
|
if ($Runtime -eq "clr") {
|
||||||
if (-not $NoNative) {
|
if (-not $NoNative) {
|
||||||
if ((Is-Elevated) -or $Ngen) {
|
if ((Is-Elevated) -or $Ngen) {
|
||||||
$runtimeBin = Get-RuntimePath $runtimeFullName
|
$runtimeBin = Get-RuntimePath $runtimeFullName
|
||||||
|
Write-Progress -Activity "Installing runtime" "Generating runtime native images" -Id 1
|
||||||
Ngen-Library $runtimeBin $Architecture
|
Ngen-Library $runtimeBin $Architecture
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -1010,7 +1058,8 @@ function dnvm-install {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
_WriteOut "Compiling native images for $runtimeFullName to improve startup performance..."
|
_WriteOut "Compiling native images for $runtimeFullName to improve startup performance..."
|
||||||
Start-Process $CrossGenCommand -Wait
|
Write-Progress -Activity "Installing runtime" "Generating runtime native images" -Id 1
|
||||||
|
Start-Process $CrossGenCommand -Wait -WindowStyle Hidden
|
||||||
_WriteOut "Finished native image compilation."
|
_WriteOut "Finished native image compilation."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1023,6 +1072,8 @@ function dnvm-install {
|
||||||
_WriteDebug "Aliasing installed runtime to '$Alias'"
|
_WriteDebug "Aliasing installed runtime to '$Alias'"
|
||||||
dnvm-alias $Alias $PackageVersion -Architecture:$Architecture -Runtime:$Runtime
|
dnvm-alias $Alias $PackageVersion -Architecture:$Architecture -Runtime:$Runtime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Write-Progress -Activity "Install complete" -Id 1 -Complete
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
2
dnvm.sh
2
dnvm.sh
|
|
@ -2,7 +2,7 @@
|
||||||
# Source this file from your .bash-profile or script to use
|
# Source this file from your .bash-profile or script to use
|
||||||
|
|
||||||
# "Constants"
|
# "Constants"
|
||||||
_DNVM_BUILDNUMBER="beta4-10346"
|
_DNVM_BUILDNUMBER="beta4-10347"
|
||||||
_DNVM_AUTHORS="Microsoft Open Technologies, Inc."
|
_DNVM_AUTHORS="Microsoft Open Technologies, Inc."
|
||||||
_DNVM_RUNTIME_PACKAGE_NAME="dnx"
|
_DNVM_RUNTIME_PACKAGE_NAME="dnx"
|
||||||
_DNVM_RUNTIME_FRIENDLY_NAME=".NET Execution Environment"
|
_DNVM_RUNTIME_FRIENDLY_NAME=".NET Execution Environment"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue