1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
// 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.
namespace WixToolsetTest.BurnE2E
{
using WixTestTools;
using Xunit;
using Xunit.Abstractions;
public class ExePackageTests : BurnE2ETests
{
public ExePackageTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
[RuntimeFact]
public void CanInstallAndUninstallPerMachineArpEntryExePackage()
{
const string arpId = "{4D9EC36A-1E63-4244-875C-3ECB0A2CAE30}";
var perMachineArpEntryExePackageBundle = this.CreateBundleInstaller(@"PerMachineArpEntryExePackage");
var arpEntryExePackage = this.CreateArpEntryInstaller(perMachineArpEntryExePackageBundle, "TestExe");
arpEntryExePackage.VerifyRegistered(false);
var installLogPath = perMachineArpEntryExePackageBundle.Install();
perMachineArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();
arpEntryExePackage.VerifyRegistered(true);
LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\"");
var uninstallLogPath = perMachineArpEntryExePackageBundle.Uninstall();
perMachineArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();
arpEntryExePackage.VerifyRegistered(false);
LogVerifier.MessageInLogFile(uninstallLogPath, $"testexe.exe\" /regd HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}");
}
[RuntimeFact]
public void CanUninstallPerMachineArpEntryExePackageOnRollback()
{
const string arpId = "{80E90929-EEA5-48A7-A680-A0237A1CAD84}";
var perMachineArpEntryExePackageFailureBundle = this.CreateBundleInstaller(@"PerMachineArpEntryExePackageFailure");
var arpEntryExePackage = this.CreateArpEntryInstaller(perMachineArpEntryExePackageFailureBundle, "TestExe");
arpEntryExePackage.VerifyRegistered(false);
var installLogPath = perMachineArpEntryExePackageFailureBundle.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE);
perMachineArpEntryExePackageFailureBundle.VerifyUnregisteredAndRemovedFromPackageCache();
arpEntryExePackage.VerifyRegistered(false);
LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\"");
LogVerifier.MessageInLogFile(installLogPath, $"testexe.exe\" /regd HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}");
}
[RuntimeFact]
public void CanInstallAndUninstallPerUserArpEntryExePackage()
{
const string arpId = "{9B5300C7-9B34-4670-9614-185B02AB87EF}";
var perUserArpEntryExePackageBundle = this.CreateBundleInstaller(@"PerUserArpEntryExePackage");
var arpEntryExePackage = this.CreateArpEntryInstaller(perUserArpEntryExePackageBundle, "TestExe");
arpEntryExePackage.VerifyRegistered(false);
var installLogPath = perUserArpEntryExePackageBundle.Install();
perUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();
arpEntryExePackage.VerifyRegistered(true);
LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},QuietUninstallString,String,\\\"");
var uninstallLogPath = perUserArpEntryExePackageBundle.Uninstall();
perUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();
arpEntryExePackage.VerifyRegistered(false);
LogVerifier.MessageInLogFile(uninstallLogPath, $"testexe.exe\" /regd HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId}");
}
[RuntimeFact]
public void FailsUninstallWhenPerUserArpEntryExePackageMissingQuietUninstallString()
{
const string arpId = "{DE9F8594-5856-4454-AB10-3C01ED246D7D}";
var brokenPerUserArpEntryExePackageBundle = this.CreateBundleInstaller(@"BrokenPerUserArpEntryExePackage");
var arpEntryExePackage = this.CreateArpEntryInstaller(brokenPerUserArpEntryExePackageBundle, "TestExe");
arpEntryExePackage.VerifyRegistered(false);
brokenPerUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();
var installLogPath = brokenPerUserArpEntryExePackageBundle.Install();
brokenPerUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();
arpEntryExePackage.VerifyRegistered(true);
LogVerifier.MessageInLogFile(installLogPath, $"TestExe.exe\" /regw \"HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{arpId},DisplayVersion,String,1.0.0.0\"");
brokenPerUserArpEntryExePackageBundle.Uninstall((int)MSIExec.MSIExecReturnCode.ERROR_INVALID_PARAMETER);
brokenPerUserArpEntryExePackageBundle.VerifyRegisteredAndInPackageCache();
arpEntryExePackage.Unregister();
brokenPerUserArpEntryExePackageBundle.Uninstall();
brokenPerUserArpEntryExePackageBundle.VerifyUnregisteredAndRemovedFromPackageCache();
}
}
}
|