diff options
author | Rob Mensching <rob@firegiant.com> | 2021-05-11 07:37:18 -0700 |
---|---|---|
committer | Rob Mensching <rob@firegiant.com> | 2021-05-11 07:37:18 -0700 |
commit | 985b2683b2717c83a27295b36e09b126083238f9 (patch) | |
tree | 622804d279e0ac58366dee62888e6a317a2b9d41 /src/internal/WixBuildTools.TestSupport/VswhereRunner.cs | |
parent | 3f583916719eeef598d10a5d4e14ef14f008243b (diff) | |
parent | 6a24996a2e831cfe402398af65b31fb1ecd575a9 (diff) | |
download | wix-985b2683b2717c83a27295b36e09b126083238f9.tar.gz wix-985b2683b2717c83a27295b36e09b126083238f9.tar.bz2 wix-985b2683b2717c83a27295b36e09b126083238f9.zip |
Merge WixBuildTools
Diffstat (limited to 'src/internal/WixBuildTools.TestSupport/VswhereRunner.cs')
-rw-r--r-- | src/internal/WixBuildTools.TestSupport/VswhereRunner.cs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/internal/WixBuildTools.TestSupport/VswhereRunner.cs b/src/internal/WixBuildTools.TestSupport/VswhereRunner.cs new file mode 100644 index 00000000..0197e125 --- /dev/null +++ b/src/internal/WixBuildTools.TestSupport/VswhereRunner.cs | |||
@@ -0,0 +1,41 @@ | |||
1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
2 | |||
3 | namespace WixBuildTools.TestSupport | ||
4 | { | ||
5 | using System; | ||
6 | using System.IO; | ||
7 | |||
8 | public class VswhereRunner : ExternalExecutable | ||
9 | { | ||
10 | private static readonly string VswhereRelativePath = @"Microsoft Visual Studio\Installer\vswhere.exe"; | ||
11 | |||
12 | private static readonly object InitLock = new object(); | ||
13 | private static bool Initialized; | ||
14 | private static VswhereRunner Instance; | ||
15 | |||
16 | public static ExternalExecutableResult Execute(string args, bool mergeErrorIntoOutput = false) => | ||
17 | InitAndExecute(args, mergeErrorIntoOutput); | ||
18 | |||
19 | private static ExternalExecutableResult InitAndExecute(string args, bool mergeErrorIntoOutput) | ||
20 | { | ||
21 | lock (InitLock) | ||
22 | { | ||
23 | if (!Initialized) | ||
24 | { | ||
25 | Initialized = true; | ||
26 | var vswherePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), VswhereRelativePath); | ||
27 | if (!File.Exists(vswherePath)) | ||
28 | { | ||
29 | throw new InvalidOperationException($"Failed to find vswhere at: {vswherePath}"); | ||
30 | } | ||
31 | |||
32 | Instance = new VswhereRunner(vswherePath); | ||
33 | } | ||
34 | } | ||
35 | |||
36 | return Instance.Run(args, mergeErrorIntoOutput); | ||
37 | } | ||
38 | |||
39 | private VswhereRunner(string exePath) : base(exePath) { } | ||
40 | } | ||
41 | } | ||