Skip to content
This repository was archived by the owner on Feb 19, 2019. It is now read-only.

Commit

Permalink
when running with administrative rights, set environment variables at…
Browse files Browse the repository at this point in the history
… Machine scope

The CurrentPrincipal::IsInRole(Administrators) check is sufficient to
ascertain administrative rights, whether UAC is enabled or not.

In particular, if UAC is enabled, this check will only return true if
running elevated.

This change enables per-machine installation on systems with UAC enabled
(only if the user installs/invokes Chocolatey from an elevated shell, so UAC
prompt is not triggered), while not disrupting the behavior for standard users.
  • Loading branch information
jberezanski committed Jun 13, 2014
1 parent eaf8ab2 commit 6dfbc44
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 10 deletions.
10 changes: 4 additions & 6 deletions nuget/tools/chocolateysetup.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,8 @@ param(
[string]$folder
)
$environmentTarget = [System.EnvironmentVariableTarget]::User
$UACEnabled = Get-UACEnabled
if ((Test-AdminRights) -and !$UACEnabled) {
Write-Debug "Administrator installing with UAC disabled so using Machine environment variable target instead of User."
if (Test-AdminRights) {
Write-Debug "Administrator installing so using Machine environment variable target instead of User."
$environmentTarget = [System.EnvironmentVariableTarget]::Machine
}
Write-Host "Creating $chocInstallVariableName as an Environment variable (targeting `'$environmentTarget`') and setting it to `'$folder`'"
Expand Down Expand Up @@ -154,9 +153,8 @@ param(
)

$environmentTarget = [System.EnvironmentVariableTarget]::User
$UACEnabled = Get-UACEnabled
if ((Test-AdminRights) -and !$UACEnabled) {
Write-Debug "Administrator installing with UAC disabled so using Machine environment variable target instead of User."
if (Test-AdminRights) {
Write-Debug "Administrator installing so using Machine environment variable target instead of User."
$environmentTarget = [System.EnvironmentVariableTarget]::Machine
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,7 @@ param(
Write-Debug "Running 'Install-ChocolateyEnvironmentVariable' with variableName:`'$variableName`' and variableValue:`'$variableValue`'";

if ($variableType -eq [System.EnvironmentVariableTarget]::Machine) {
$UACEnabled = Get-UACEnabled
if ((Test-AdminRights) -and !$UACEnabled) {
if (Test-AdminRights) {
[Environment]::SetEnvironmentVariable($variableName, $variableValue, $variableType)
} else {
$psArgs = "[Environment]::SetEnvironmentVariable(`'$variableName`',`'$variableValue`', `'$variableType`')"
Expand Down
3 changes: 1 addition & 2 deletions src/helpers/functions/Install-ChocolateyPath.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ param(
$actualPath = $actualPath + $pathToInstall

if ($pathType -eq [System.EnvironmentVariableTarget]::Machine) {
$UACEnabled = Get-UACEnabled
if ((Test-AdminRights) -and !$UACEnabled) {
if (Test-AdminRights) {
[Environment]::SetEnvironmentVariable('Path', $actualPath, $pathType)
} else {
$psArgs = "[Environment]::SetEnvironmentVariable('Path',`'$actualPath`', `'$pathType`')"
Expand Down

0 comments on commit 6dfbc44

Please sign in to comment.