aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2023-01-12 16:15:31 -0800
committerRob Mensching <rob@firegiant.com>2023-01-12 17:18:08 -0800
commite74bc9e2bcca9ba4378e8a9c87f5081295616902 (patch)
treeeff79906fb5d79c0f2c49c1ea71dd8ff4fc7aa83
parente3b4af31d93962a7bd0a417d400921e00e9e249a (diff)
downloadwix-e74bc9e2bcca9ba4378e8a9c87f5081295616902.tar.gz
wix-e74bc9e2bcca9ba4378e8a9c87f5081295616902.tar.bz2
wix-e74bc9e2bcca9ba4378e8a9c87f5081295616902.zip
Add support for ALLUSERS=2 with Scope=perUserOrMachine
Fixes 7137
-rw-r--r--src/wix/WixToolset.Core/Compiler_Package.cs12
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/AllUsersFixture.cs77
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerMachine.wxs15
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUser.wxs15
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUserOrMachine.wxs15
5 files changed, 133 insertions, 1 deletions
diff --git a/src/wix/WixToolset.Core/Compiler_Package.cs b/src/wix/WixToolset.Core/Compiler_Package.cs
index e59c394a..e0b8a3f6 100644
--- a/src/wix/WixToolset.Core/Compiler_Package.cs
+++ b/src/wix/WixToolset.Core/Compiler_Package.cs
@@ -31,6 +31,7 @@ namespace WixToolset.Core
31 var productCode = "*"; 31 var productCode = "*";
32 string productLanguage = null; 32 string productLanguage = null;
33 var isPerMachine = true; 33 var isPerMachine = true;
34 var isPerUserOrMachine = false;
34 string upgradeCode = null; 35 string upgradeCode = null;
35 string manufacturer = null; 36 string manufacturer = null;
36 string version = null; 37 string version = null;
@@ -91,6 +92,10 @@ namespace WixToolset.Core
91 isPerMachine = false; 92 isPerMachine = false;
92 sourceBits |= 8; 93 sourceBits |= 8;
93 break; 94 break;
95 case "perUserOrMachine":
96 isPerMachine = false;
97 isPerUserOrMachine = true;
98 break;
94 default: 99 default:
95 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installScope, "perMachine", "perUser")); 100 this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, installScope, "perMachine", "perUser"));
96 break; 101 break;
@@ -169,7 +174,12 @@ namespace WixToolset.Core
169 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "UpgradeCode"), upgradeCode, false, false, false, true); 174 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "UpgradeCode"), upgradeCode, false, false, false, true);
170 } 175 }
171 176
172 if (isPerMachine) 177 if (isPerUserOrMachine)
178 {
179 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "ALLUSERS"), "2", false, false, false, false);
180 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "MSIINSTALLPERUSER"), "1", false, false, false, false);
181 }
182 else if (isPerMachine)
173 { 183 {
174 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "ALLUSERS"), "1", false, false, false, false); 184 this.AddProperty(sourceLineNumbers, new Identifier(AccessModifier.Global, "ALLUSERS"), "1", false, false, false, false);
175 } 185 }
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/AllUsersFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/AllUsersFixture.cs
new file mode 100644
index 00000000..0c1fd9e0
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/AllUsersFixture.cs
@@ -0,0 +1,77 @@
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
3namespace WixToolsetTest.CoreIntegration
4{
5 using System.IO;
6 using System.Linq;
7 using WixInternal.Core.TestPackage;
8 using WixInternal.TestSupport;
9 using Xunit;
10
11 public class AllUsersFixture
12 {
13 [Fact]
14 public void CanCheckPerMachineMsi()
15 {
16 var propertyRows = BuildAndQueryPropertyTable("PerMachine.wxs");
17
18 WixAssert.CompareLineByLine(new[]
19 {
20 "_SummaryInformation:WordCount\t2",
21 "Property:ALLUSERS\t1"
22 }, propertyRows);
23 }
24
25 [Fact]
26 public void CanCheckPerUserMsi()
27 {
28 var propertyRows = BuildAndQueryPropertyTable("PerUser.wxs");
29
30 WixAssert.CompareLineByLine(new[]
31 {
32 "_SummaryInformation:WordCount\t10"
33 }, propertyRows);
34 }
35
36 [Fact]
37 public void CanCheckPerUserOrMachineMsi()
38 {
39 var propertyRows = BuildAndQueryPropertyTable("PerUserOrMachine.wxs");
40
41 WixAssert.CompareLineByLine(new[]
42 {
43 "_SummaryInformation:WordCount\t2",
44 "Property:ALLUSERS\t2",
45 "Property:MSIINSTALLPERUSER\t1"
46 }, propertyRows);
47 }
48
49 private static string[] BuildAndQueryPropertyTable(string file)
50 {
51 var folder = TestData.Get("TestData", "AllUsers");
52
53 using (var fs = new DisposableFileSystem())
54 {
55 var baseFolder = fs.GetFolder();
56 var intermediateFolder = Path.Combine(baseFolder, "obj");
57 var binFolder = Path.Combine(baseFolder, "bin");
58 var msiPath = Path.Combine(binFolder, "test.msi");
59
60 var result = WixRunner.Execute(new[]
61 {
62 "build",
63 Path.Combine(folder, file),
64 "-intermediateFolder", intermediateFolder,
65 "-bindpath", folder,
66 "-o", msiPath,
67 });
68 result.AssertSuccess();
69
70 return Query.QueryDatabase(msiPath, new[] { "Property", "_SummaryInformation" })
71 .Where(s => s.StartsWith("Property:ALLUSERS") || s.StartsWith("Property:MSIINSTALLPERUSER") || s.StartsWith("_SummaryInformation:WordCount"))
72 .OrderBy(s => s)
73 .ToArray();
74 }
75 }
76 }
77}
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerMachine.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerMachine.wxs
new file mode 100644
index 00000000..3f19277b
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerMachine.wxs
@@ -0,0 +1,15 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Package Version="1"
3 Name="MsiPackage"
4 Manufacturer="Example Corporation"
5 UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"
6 Scope="perMachine">
7 <MajorUpgrade DowngradeErrorMessage="Downgrade not allowed" />
8
9 <Feature Id="ProductFeature" Title="Feature title">
10 <Component Directory="DesktopFolder">
11 <File Source="PerUser.wxs" />
12 </Component>
13 </Feature>
14 </Package>
15</Wix>
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUser.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUser.wxs
new file mode 100644
index 00000000..12ba9c59
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUser.wxs
@@ -0,0 +1,15 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Package Version="1"
3 Name="MsiPackage"
4 Manufacturer="Example Corporation"
5 UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"
6 Scope="perUser">
7 <MajorUpgrade DowngradeErrorMessage="Downgrade not allowed" />
8
9 <Feature Id="ProductFeature" Title="Feature title">
10 <Component Directory="DesktopFolder">
11 <File Source="PerUser.wxs" />
12 </Component>
13 </Feature>
14 </Package>
15</Wix>
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUserOrMachine.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUserOrMachine.wxs
new file mode 100644
index 00000000..293cf1fa
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/AllUsers/PerUserOrMachine.wxs
@@ -0,0 +1,15 @@
1<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2 <Package Version="1"
3 Name="MsiPackage"
4 Manufacturer="Example Corporation"
5 UpgradeCode="047730a5-30fe-4a62-a520-da9381b8226a"
6 Scope="perUserOrMachine">
7 <MajorUpgrade DowngradeErrorMessage="Downgrade not allowed" />
8
9 <Feature Id="ProductFeature" Title="Feature title">
10 <Component Directory="DesktopFolder">
11 <File Source="PerUser.wxs" />
12 </Component>
13 </Feature>
14 </Package>
15</Wix>