Fix windows keep adding tools path to env:PATH (#8248)

Environment.GetEnvironmentVariable(PathName) means

Environment.GetEnvironmentVariable(PathName,
EnvironmentVariableTarget.Process)

However, I have added to .User. So the detection of path existence
failed. And it ends up adding the path again and again
This commit is contained in:
William Lee 2017-12-15 15:04:59 -08:00 committed by GitHub
parent a86e59aa5d
commit d833eaa657
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 8 deletions

View file

@ -33,8 +33,7 @@ namespace Microsoft.DotNet.ShellShim
{
environmentPath = new WindowsEnvironmentPath(
cliFolderPathCalculator.ExecutablePackagesPath,
Reporter.Output,
environmentProvider);
Reporter.Output);
}
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && hasSuperUserAccess)
{

View file

@ -11,18 +11,14 @@ namespace Microsoft.DotNet.ShellShim
internal class WindowsEnvironmentPath : IEnvironmentPath
{
private readonly IReporter _reporter;
private readonly IEnvironmentProvider _environmentProvider;
private const string PathName = "PATH";
private readonly string _packageExecutablePath;
public WindowsEnvironmentPath(
string packageExecutablePath, IReporter reporter,
IEnvironmentProvider environmentProvider)
string packageExecutablePath, IReporter reporter)
{
_packageExecutablePath
= packageExecutablePath ?? throw new ArgumentNullException(nameof(packageExecutablePath));
_environmentProvider
= environmentProvider ?? throw new ArgumentNullException(nameof(environmentProvider));
_reporter
= reporter ?? throw new ArgumentNullException(nameof(reporter));
}
@ -44,7 +40,9 @@ namespace Microsoft.DotNet.ShellShim
private bool PackageExecutablePathExists()
{
return _environmentProvider.GetEnvironmentVariable(PathName).Split(';').Contains(_packageExecutablePath);
return Environment.GetEnvironmentVariable(PathName, EnvironmentVariableTarget.User).Split(';').Contains(_packageExecutablePath)
|| Environment.GetEnvironmentVariable(PathName, EnvironmentVariableTarget.Machine).Split(';').Contains(_packageExecutablePath)
|| Environment.GetEnvironmentVariable(PathName, EnvironmentVariableTarget.Process).Split(';').Contains(_packageExecutablePath);
}
public void PrintAddPathInstructionIfPathDoesNotExist()