diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-07-02 10:18:08 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-07-02 12:50:09 -0500 |
commit | f43d176f95601ff7524e06247166d4f3b6e61c05 (patch) | |
tree | 2e3580ca60c85e1d07a0ab4a2b1279d25fd41f6c /src/api | |
parent | 9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2 (diff) | |
download | wix-f43d176f95601ff7524e06247166d4f3b6e61c05.tar.gz wix-f43d176f95601ff7524e06247166d4f3b6e61c05.tar.bz2 wix-f43d176f95601ff7524e06247166d4f3b6e61c05.zip |
Make the BA responsible for parsing restart prompt behavior.
Fixes #4975
Diffstat (limited to 'src/api')
12 files changed, 103 insertions, 43 deletions
diff --git a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h index 56f6b361..8301d45f 100644 --- a/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h +++ b/src/api/burn/WixToolset.BootstrapperCore.Native/inc/BootstrapperApplication.h | |||
@@ -11,15 +11,6 @@ enum BOOTSTRAPPER_DISPLAY | |||
11 | BOOTSTRAPPER_DISPLAY_FULL, | 11 | BOOTSTRAPPER_DISPLAY_FULL, |
12 | }; | 12 | }; |
13 | 13 | ||
14 | enum BOOTSTRAPPER_RESTART | ||
15 | { | ||
16 | BOOTSTRAPPER_RESTART_UNKNOWN, | ||
17 | BOOTSTRAPPER_RESTART_NEVER, | ||
18 | BOOTSTRAPPER_RESTART_PROMPT, | ||
19 | BOOTSTRAPPER_RESTART_AUTOMATIC, | ||
20 | BOOTSTRAPPER_RESTART_ALWAYS, | ||
21 | }; | ||
22 | |||
23 | enum BOOTSTRAPPER_REGISTRATION_TYPE | 14 | enum BOOTSTRAPPER_REGISTRATION_TYPE |
24 | { | 15 | { |
25 | BOOTSTRAPPER_REGISTRATION_TYPE_NONE, // The engine will ignore NONE if it recommended INPROGRESS or FULL. | 16 | BOOTSTRAPPER_REGISTRATION_TYPE_NONE, // The engine will ignore NONE if it recommended INPROGRESS or FULL. |
@@ -286,7 +277,6 @@ struct BOOTSTRAPPER_COMMAND | |||
286 | DWORD cbSize; | 277 | DWORD cbSize; |
287 | BOOTSTRAPPER_ACTION action; | 278 | BOOTSTRAPPER_ACTION action; |
288 | BOOTSTRAPPER_DISPLAY display; | 279 | BOOTSTRAPPER_DISPLAY display; |
289 | BOOTSTRAPPER_RESTART restart; | ||
290 | 280 | ||
291 | LPWSTR wzCommandLine; | 281 | LPWSTR wzCommandLine; |
292 | int nCmdShow; | 282 | int nCmdShow; |
diff --git a/src/api/burn/WixToolset.Mba.Core/BootstrapperCommand.cs b/src/api/burn/WixToolset.Mba.Core/BootstrapperCommand.cs index 345e0448..88a9b9bb 100644 --- a/src/api/burn/WixToolset.Mba.Core/BootstrapperCommand.cs +++ b/src/api/burn/WixToolset.Mba.Core/BootstrapperCommand.cs | |||
@@ -17,7 +17,6 @@ namespace WixToolset.Mba.Core | |||
17 | /// </summary> | 17 | /// </summary> |
18 | /// <param name="action"></param> | 18 | /// <param name="action"></param> |
19 | /// <param name="display"></param> | 19 | /// <param name="display"></param> |
20 | /// <param name="restart"></param> | ||
21 | /// <param name="commandLine"></param> | 20 | /// <param name="commandLine"></param> |
22 | /// <param name="cmdShow"></param> | 21 | /// <param name="cmdShow"></param> |
23 | /// <param name="resume"></param> | 22 | /// <param name="resume"></param> |
@@ -30,7 +29,6 @@ namespace WixToolset.Mba.Core | |||
30 | public BootstrapperCommand( | 29 | public BootstrapperCommand( |
31 | LaunchAction action, | 30 | LaunchAction action, |
32 | Display display, | 31 | Display display, |
33 | Restart restart, | ||
34 | string commandLine, | 32 | string commandLine, |
35 | int cmdShow, | 33 | int cmdShow, |
36 | ResumeType resume, | 34 | ResumeType resume, |
@@ -43,7 +41,6 @@ namespace WixToolset.Mba.Core | |||
43 | { | 41 | { |
44 | this.Action = action; | 42 | this.Action = action; |
45 | this.Display = display; | 43 | this.Display = display; |
46 | this.Restart = restart; | ||
47 | this.CommandLine = commandLine; | 44 | this.CommandLine = commandLine; |
48 | this.CmdShow = cmdShow; | 45 | this.CmdShow = cmdShow; |
49 | this.Resume = resume; | 46 | this.Resume = resume; |
@@ -62,9 +59,6 @@ namespace WixToolset.Mba.Core | |||
62 | public Display Display { get; } | 59 | public Display Display { get; } |
63 | 60 | ||
64 | /// <inheritdoc/> | 61 | /// <inheritdoc/> |
65 | public Restart Restart { get; } | ||
66 | |||
67 | /// <inheritdoc/> | ||
68 | public string CommandLine { get; } | 62 | public string CommandLine { get; } |
69 | 63 | ||
70 | /// <inheritdoc/> | 64 | /// <inheritdoc/> |
@@ -97,6 +91,7 @@ namespace WixToolset.Mba.Core | |||
97 | var args = ParseCommandLineToArgs(this.CommandLine); | 91 | var args = ParseCommandLineToArgs(this.CommandLine); |
98 | var unknownArgs = new List<string>(); | 92 | var unknownArgs = new List<string>(); |
99 | var variables = new List<KeyValuePair<string, string>>(); | 93 | var variables = new List<KeyValuePair<string, string>>(); |
94 | var restart = Restart.Unknown; | ||
100 | 95 | ||
101 | foreach (var arg in args) | 96 | foreach (var arg in args) |
102 | { | 97 | { |
@@ -104,7 +99,25 @@ namespace WixToolset.Mba.Core | |||
104 | 99 | ||
105 | if (arg[0] == '-' || arg[0] == '/') | 100 | if (arg[0] == '-' || arg[0] == '/') |
106 | { | 101 | { |
107 | unknownArg = true; | 102 | var parameter = arg.Substring(1).ToLowerInvariant(); |
103 | switch (parameter) | ||
104 | { | ||
105 | case "norestart": | ||
106 | if (restart == Restart.Unknown) | ||
107 | { | ||
108 | restart = Restart.Never; | ||
109 | } | ||
110 | break; | ||
111 | case "forcerestart": | ||
112 | if (restart == Restart.Unknown) | ||
113 | { | ||
114 | restart = Restart.Always; | ||
115 | } | ||
116 | break; | ||
117 | default: | ||
118 | unknownArg = true; | ||
119 | break; | ||
120 | } | ||
108 | } | 121 | } |
109 | else | 122 | else |
110 | { | 123 | { |
@@ -127,8 +140,14 @@ namespace WixToolset.Mba.Core | |||
127 | } | 140 | } |
128 | } | 141 | } |
129 | 142 | ||
143 | if (restart == Restart.Unknown) | ||
144 | { | ||
145 | restart = this.Display < Display.Full ? Restart.Automatic : Restart.Prompt; | ||
146 | } | ||
147 | |||
130 | return new MbaCommand | 148 | return new MbaCommand |
131 | { | 149 | { |
150 | Restart = restart, | ||
132 | UnknownCommandLineArgs = unknownArgs.ToArray(), | 151 | UnknownCommandLineArgs = unknownArgs.ToArray(), |
133 | Variables = variables.ToArray(), | 152 | Variables = variables.ToArray(), |
134 | }; | 153 | }; |
diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplicationFactory.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplicationFactory.cs index 0f9193d0..64e25ff4 100644 --- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplicationFactory.cs +++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperApplicationFactory.cs | |||
@@ -35,7 +35,6 @@ namespace WixToolset.Mba.Core | |||
35 | [MarshalAs(UnmanagedType.I4)] internal int cbSize; | 35 | [MarshalAs(UnmanagedType.I4)] internal int cbSize; |
36 | [MarshalAs(UnmanagedType.U4)] private readonly LaunchAction action; | 36 | [MarshalAs(UnmanagedType.U4)] private readonly LaunchAction action; |
37 | [MarshalAs(UnmanagedType.U4)] private readonly Display display; | 37 | [MarshalAs(UnmanagedType.U4)] private readonly Display display; |
38 | [MarshalAs(UnmanagedType.U4)] private readonly Restart restart; | ||
39 | private readonly IntPtr wzCommandLine; | 38 | private readonly IntPtr wzCommandLine; |
40 | [MarshalAs(UnmanagedType.I4)] private readonly int nCmdShow; | 39 | [MarshalAs(UnmanagedType.I4)] private readonly int nCmdShow; |
41 | [MarshalAs(UnmanagedType.U4)] private readonly ResumeType resume; | 40 | [MarshalAs(UnmanagedType.U4)] private readonly ResumeType resume; |
@@ -51,7 +50,6 @@ namespace WixToolset.Mba.Core | |||
51 | return new BootstrapperCommand( | 50 | return new BootstrapperCommand( |
52 | this.action, | 51 | this.action, |
53 | this.display, | 52 | this.display, |
54 | this.restart, | ||
55 | Marshal.PtrToStringUni(this.wzCommandLine), | 53 | Marshal.PtrToStringUni(this.wzCommandLine), |
56 | this.nCmdShow, | 54 | this.nCmdShow, |
57 | this.resume, | 55 | this.resume, |
diff --git a/src/api/burn/WixToolset.Mba.Core/IBootstrapperCommand.cs b/src/api/burn/WixToolset.Mba.Core/IBootstrapperCommand.cs index b7baa55c..f583e619 100644 --- a/src/api/burn/WixToolset.Mba.Core/IBootstrapperCommand.cs +++ b/src/api/burn/WixToolset.Mba.Core/IBootstrapperCommand.cs | |||
@@ -20,11 +20,6 @@ namespace WixToolset.Mba.Core | |||
20 | Display Display { get; } | 20 | Display Display { get; } |
21 | 21 | ||
22 | /// <summary> | 22 | /// <summary> |
23 | /// Gets the action to perform if a reboot is required. | ||
24 | /// </summary> | ||
25 | Restart Restart { get; } | ||
26 | |||
27 | /// <summary> | ||
28 | /// Gets the command line arguments. | 23 | /// Gets the command line arguments. |
29 | /// </summary> | 24 | /// </summary> |
30 | /// <returns> | 25 | /// <returns> |
diff --git a/src/api/burn/WixToolset.Mba.Core/IMbaCommand.cs b/src/api/burn/WixToolset.Mba.Core/IMbaCommand.cs index a3ad68d8..495b2f44 100644 --- a/src/api/burn/WixToolset.Mba.Core/IMbaCommand.cs +++ b/src/api/burn/WixToolset.Mba.Core/IMbaCommand.cs | |||
@@ -10,6 +10,11 @@ namespace WixToolset.Mba.Core | |||
10 | public interface IMbaCommand | 10 | public interface IMbaCommand |
11 | { | 11 | { |
12 | /// <summary> | 12 | /// <summary> |
13 | /// Gets the action to perform if a reboot is required. | ||
14 | /// </summary> | ||
15 | Restart Restart { get; } | ||
16 | |||
17 | /// <summary> | ||
13 | /// The command line arguments not parsed into <see cref="IBootstrapperCommand"/> or <see cref="IMbaCommand"/>. | 18 | /// The command line arguments not parsed into <see cref="IBootstrapperCommand"/> or <see cref="IMbaCommand"/>. |
14 | /// </summary> | 19 | /// </summary> |
15 | string[] UnknownCommandLineArgs { get; } | 20 | string[] UnknownCommandLineArgs { get; } |
diff --git a/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs b/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs index 424cde63..8917a334 100644 --- a/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs +++ b/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs | |||
@@ -9,6 +9,8 @@ namespace WixToolset.Mba.Core | |||
9 | /// </summary> | 9 | /// </summary> |
10 | internal sealed class MbaCommand : IMbaCommand | 10 | internal sealed class MbaCommand : IMbaCommand |
11 | { | 11 | { |
12 | public Restart Restart { get; internal set; } | ||
13 | |||
12 | public string[] UnknownCommandLineArgs { get; internal set; } | 14 | public string[] UnknownCommandLineArgs { get; internal set; } |
13 | 15 | ||
14 | public KeyValuePair<string, string>[] Variables { get; internal set; } | 16 | public KeyValuePair<string, string>[] Variables { get; internal set; } |
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp index f71784a5..2746f49e 100644 --- a/src/api/burn/balutil/balinfo.cpp +++ b/src/api/burn/balutil/balinfo.cpp | |||
@@ -19,7 +19,7 @@ static HRESULT ParseOverridableVariablesFromXml( | |||
19 | 19 | ||
20 | DAPI_(HRESULT) BalInfoParseCommandLine( | 20 | DAPI_(HRESULT) BalInfoParseCommandLine( |
21 | __in BAL_INFO_COMMAND* pCommand, | 21 | __in BAL_INFO_COMMAND* pCommand, |
22 | __in LPCWSTR wzCommandLine | 22 | __in const BOOTSTRAPPER_COMMAND* pBootstrapperCommand |
23 | ) | 23 | ) |
24 | { | 24 | { |
25 | HRESULT hr = S_OK; | 25 | HRESULT hr = S_OK; |
@@ -29,13 +29,13 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
29 | 29 | ||
30 | BalInfoUninitializeCommandLine(pCommand); | 30 | BalInfoUninitializeCommandLine(pCommand); |
31 | 31 | ||
32 | if (!wzCommandLine || !*wzCommandLine) | 32 | if (!pBootstrapperCommand->wzCommandLine || !*pBootstrapperCommand->wzCommandLine) |
33 | { | 33 | { |
34 | ExitFunction(); | 34 | ExitFunction(); |
35 | } | 35 | } |
36 | 36 | ||
37 | hr = AppParseCommandLine(wzCommandLine, &argc, &argv); | 37 | hr = AppParseCommandLine(pBootstrapperCommand->wzCommandLine, &argc, &argv); |
38 | ExitOnFailure(hr, "Failed to parse command line."); | 38 | BalExitOnFailure(hr, "Failed to parse command line."); |
39 | 39 | ||
40 | for (int i = 0; i < argc; ++i) | 40 | for (int i = 0; i < argc; ++i) |
41 | { | 41 | { |
@@ -43,7 +43,24 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
43 | 43 | ||
44 | if (argv[i][0] == L'-' || argv[i][0] == L'/') | 44 | if (argv[i][0] == L'-' || argv[i][0] == L'/') |
45 | { | 45 | { |
46 | fUnknownArg = TRUE; | 46 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, L"norestart", -1)) |
47 | { | ||
48 | if (BAL_INFO_RESTART_UNKNOWN == pCommand->restart) | ||
49 | { | ||
50 | pCommand->restart = BAL_INFO_RESTART_NEVER; | ||
51 | } | ||
52 | } | ||
53 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, L"forcerestart", -1)) | ||
54 | { | ||
55 | if (BAL_INFO_RESTART_UNKNOWN == pCommand->restart) | ||
56 | { | ||
57 | pCommand->restart = BAL_INFO_RESTART_ALWAYS; | ||
58 | } | ||
59 | } | ||
60 | else | ||
61 | { | ||
62 | fUnknownArg = TRUE; | ||
63 | } | ||
47 | } | 64 | } |
48 | else | 65 | else |
49 | { | 66 | { |
@@ -55,10 +72,10 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
55 | else | 72 | else |
56 | { | 73 | { |
57 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableNames), pCommand->cVariables, 1, sizeof(LPWSTR), 5); | 74 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableNames), pCommand->cVariables, 1, sizeof(LPWSTR), 5); |
58 | ExitOnFailure(hr, "Failed to ensure size for variable names."); | 75 | BalExitOnFailure(hr, "Failed to ensure size for variable names."); |
59 | 76 | ||
60 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableValues), pCommand->cVariables, 1, sizeof(LPWSTR), 5); | 77 | hr = MemEnsureArraySizeForNewItems(reinterpret_cast<LPVOID*>(&pCommand->rgVariableValues), pCommand->cVariables, 1, sizeof(LPWSTR), 5); |
61 | ExitOnFailure(hr, "Failed to ensure size for variable values."); | 78 | BalExitOnFailure(hr, "Failed to ensure size for variable values."); |
62 | 79 | ||
63 | LPWSTR* psczVariableName = pCommand->rgVariableNames + pCommand->cVariables; | 80 | LPWSTR* psczVariableName = pCommand->rgVariableNames + pCommand->cVariables; |
64 | LPWSTR* psczVariableValue = pCommand->rgVariableValues + pCommand->cVariables; | 81 | LPWSTR* psczVariableValue = pCommand->rgVariableValues + pCommand->cVariables; |
@@ -86,6 +103,11 @@ DAPI_(HRESULT) BalInfoParseCommandLine( | |||
86 | } | 103 | } |
87 | 104 | ||
88 | LExit: | 105 | LExit: |
106 | if (BAL_INFO_RESTART_UNKNOWN == pCommand->restart) | ||
107 | { | ||
108 | pCommand->restart = BOOTSTRAPPER_DISPLAY_FULL > pBootstrapperCommand->display ? BAL_INFO_RESTART_AUTOMATIC : BAL_INFO_RESTART_PROMPT; | ||
109 | } | ||
110 | |||
89 | if (argv) | 111 | if (argv) |
90 | { | 112 | { |
91 | AppFreeCommandLineArgs(argv); | 113 | AppFreeCommandLineArgs(argv); |
diff --git a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h index 393987ba..53fa369b 100644 --- a/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h +++ b/src/api/burn/balutil/inc/BalBaseBootstrapperApplication.h | |||
@@ -9,6 +9,7 @@ | |||
9 | #include "IBootstrapperApplication.h" | 9 | #include "IBootstrapperApplication.h" |
10 | 10 | ||
11 | #include "balutil.h" | 11 | #include "balutil.h" |
12 | #include "balinfo.h" | ||
12 | #include "balretry.h" | 13 | #include "balretry.h" |
13 | 14 | ||
14 | class CBalBaseBootstrapperApplication : public IBootstrapperApplication | 15 | class CBalBaseBootstrapperApplication : public IBootstrapperApplication |
@@ -794,7 +795,7 @@ public: // IBootstrapperApplication | |||
794 | { | 795 | { |
795 | HRESULT hr = S_OK; | 796 | HRESULT hr = S_OK; |
796 | BOOL fRestartRequired = BOOTSTRAPPER_APPLY_RESTART_REQUIRED == restart; | 797 | BOOL fRestartRequired = BOOTSTRAPPER_APPLY_RESTART_REQUIRED == restart; |
797 | BOOL fShouldBlockRestart = BOOTSTRAPPER_DISPLAY_FULL <= m_display && BOOTSTRAPPER_RESTART_PROMPT >= m_restart; | 798 | BOOL fShouldBlockRestart = BOOTSTRAPPER_DISPLAY_FULL <= m_display && BAL_INFO_RESTART_PROMPT >= m_BalInfoCommand.restart; |
798 | 799 | ||
799 | if (fRestartRequired && !fShouldBlockRestart) | 800 | if (fRestartRequired && !fShouldBlockRestart) |
800 | { | 801 | { |
@@ -976,6 +977,22 @@ public: // IBootstrapperApplication | |||
976 | return S_OK; | 977 | return S_OK; |
977 | } | 978 | } |
978 | 979 | ||
980 | public: //CBalBaseBootstrapperApplication | ||
981 | virtual STDMETHODIMP Initialize( | ||
982 | __in const BOOTSTRAPPER_CREATE_ARGS* pCreateArgs | ||
983 | ) | ||
984 | { | ||
985 | HRESULT hr = S_OK; | ||
986 | |||
987 | m_display = pCreateArgs->pCommand->display; | ||
988 | |||
989 | hr = BalInfoParseCommandLine(&m_BalInfoCommand, pCreateArgs->pCommand); | ||
990 | BalExitOnFailure(hr, "Failed to parse command line with balutil."); | ||
991 | |||
992 | LExit: | ||
993 | return hr; | ||
994 | } | ||
995 | |||
979 | protected: | 996 | protected: |
980 | // | 997 | // |
981 | // PromptCancel - prompts the user to close (if not forced). | 998 | // PromptCancel - prompts the user to close (if not forced). |
@@ -1029,20 +1046,19 @@ protected: | |||
1029 | 1046 | ||
1030 | CBalBaseBootstrapperApplication( | 1047 | CBalBaseBootstrapperApplication( |
1031 | __in IBootstrapperEngine* pEngine, | 1048 | __in IBootstrapperEngine* pEngine, |
1032 | __in const BOOTSTRAPPER_CREATE_ARGS* pArgs, | ||
1033 | __in DWORD dwRetryCount = 0, | 1049 | __in DWORD dwRetryCount = 0, |
1034 | __in DWORD dwRetryTimeout = 1000 | 1050 | __in DWORD dwRetryTimeout = 1000 |
1035 | ) | 1051 | ) |
1036 | { | 1052 | { |
1037 | m_cReferences = 1; | 1053 | m_cReferences = 1; |
1038 | m_display = pArgs->pCommand->display; | 1054 | m_display = BOOTSTRAPPER_DISPLAY_UNKNOWN; |
1039 | m_restart = pArgs->pCommand->restart; | ||
1040 | 1055 | ||
1041 | pEngine->AddRef(); | 1056 | pEngine->AddRef(); |
1042 | m_pEngine = pEngine; | 1057 | m_pEngine = pEngine; |
1043 | 1058 | ||
1044 | ::InitializeCriticalSection(&m_csCanceled); | 1059 | ::InitializeCriticalSection(&m_csCanceled); |
1045 | m_fCanceled = FALSE; | 1060 | m_fCanceled = FALSE; |
1061 | m_BalInfoCommand = { }; | ||
1046 | m_fApplying = FALSE; | 1062 | m_fApplying = FALSE; |
1047 | m_fRollingBack = FALSE; | 1063 | m_fRollingBack = FALSE; |
1048 | 1064 | ||
@@ -1054,6 +1070,7 @@ protected: | |||
1054 | 1070 | ||
1055 | virtual ~CBalBaseBootstrapperApplication() | 1071 | virtual ~CBalBaseBootstrapperApplication() |
1056 | { | 1072 | { |
1073 | BalInfoUninitializeCommandLine(&m_BalInfoCommand); | ||
1057 | BalRetryUninitialize(); | 1074 | BalRetryUninitialize(); |
1058 | ::DeleteCriticalSection(&m_csCanceled); | 1075 | ::DeleteCriticalSection(&m_csCanceled); |
1059 | 1076 | ||
@@ -1064,10 +1081,11 @@ protected: | |||
1064 | CRITICAL_SECTION m_csCanceled; | 1081 | CRITICAL_SECTION m_csCanceled; |
1065 | BOOL m_fCanceled; | 1082 | BOOL m_fCanceled; |
1066 | 1083 | ||
1084 | BAL_INFO_COMMAND m_BalInfoCommand; | ||
1085 | |||
1067 | private: | 1086 | private: |
1068 | long m_cReferences; | 1087 | long m_cReferences; |
1069 | BOOTSTRAPPER_DISPLAY m_display; | 1088 | BOOTSTRAPPER_DISPLAY m_display; |
1070 | BOOTSTRAPPER_RESTART m_restart; | ||
1071 | IBootstrapperEngine* m_pEngine; | 1089 | IBootstrapperEngine* m_pEngine; |
1072 | 1090 | ||
1073 | BOOL m_fApplying; | 1091 | BOOL m_fApplying; |
diff --git a/src/api/burn/balutil/inc/balinfo.h b/src/api/burn/balutil/inc/balinfo.h index 07a1cbb7..769becb2 100644 --- a/src/api/burn/balutil/inc/balinfo.h +++ b/src/api/burn/balutil/inc/balinfo.h | |||
@@ -18,6 +18,15 @@ typedef enum BAL_INFO_PACKAGE_TYPE | |||
18 | BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, | 18 | BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, |
19 | } BAL_INFO_PACKAGE_TYPE; | 19 | } BAL_INFO_PACKAGE_TYPE; |
20 | 20 | ||
21 | typedef enum _BAL_INFO_RESTART | ||
22 | { | ||
23 | BAL_INFO_RESTART_UNKNOWN, | ||
24 | BAL_INFO_RESTART_NEVER, | ||
25 | BAL_INFO_RESTART_PROMPT, | ||
26 | BAL_INFO_RESTART_AUTOMATIC, | ||
27 | BAL_INFO_RESTART_ALWAYS, | ||
28 | } BAL_INFO_RESTART; | ||
29 | |||
21 | typedef enum _BAL_INFO_VARIABLE_COMMAND_LINE_TYPE | 30 | typedef enum _BAL_INFO_VARIABLE_COMMAND_LINE_TYPE |
22 | { | 31 | { |
23 | BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE, | 32 | BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE, |
@@ -85,6 +94,7 @@ typedef struct _BAL_INFO_COMMAND | |||
85 | DWORD cVariables; | 94 | DWORD cVariables; |
86 | LPWSTR* rgVariableNames; | 95 | LPWSTR* rgVariableNames; |
87 | LPWSTR* rgVariableValues; | 96 | LPWSTR* rgVariableValues; |
97 | BAL_INFO_RESTART restart; | ||
88 | } BAL_INFO_COMMAND; | 98 | } BAL_INFO_COMMAND; |
89 | 99 | ||
90 | 100 | ||
@@ -94,7 +104,7 @@ typedef struct _BAL_INFO_COMMAND | |||
94 | ********************************************************************/ | 104 | ********************************************************************/ |
95 | HRESULT DAPI BalInfoParseCommandLine( | 105 | HRESULT DAPI BalInfoParseCommandLine( |
96 | __in BAL_INFO_COMMAND* pCommand, | 106 | __in BAL_INFO_COMMAND* pCommand, |
97 | __in LPCWSTR wzCommandLine | 107 | __in const BOOTSTRAPPER_COMMAND* pBootstrapperCommand |
98 | ); | 108 | ); |
99 | 109 | ||
100 | 110 | ||
diff --git a/src/api/burn/bextutil/inc/BextBaseBundleExtension.h b/src/api/burn/bextutil/inc/BextBaseBundleExtension.h index 69c338e4..a302702e 100644 --- a/src/api/burn/bextutil/inc/BextBaseBundleExtension.h +++ b/src/api/burn/bextutil/inc/BextBaseBundleExtension.h | |||
@@ -80,7 +80,7 @@ public: // IBundleExtension | |||
80 | public: //CBextBaseBundleExtension | 80 | public: //CBextBaseBundleExtension |
81 | virtual STDMETHODIMP Initialize( | 81 | virtual STDMETHODIMP Initialize( |
82 | __in const BUNDLE_EXTENSION_CREATE_ARGS* pCreateArgs | 82 | __in const BUNDLE_EXTENSION_CREATE_ARGS* pCreateArgs |
83 | ) | 83 | ) |
84 | { | 84 | { |
85 | HRESULT hr = S_OK; | 85 | HRESULT hr = S_OK; |
86 | 86 | ||
diff --git a/src/api/burn/test/BalUtilUnitTest/TestBootstrapperApplication.cpp b/src/api/burn/test/BalUtilUnitTest/TestBootstrapperApplication.cpp index 13d22e72..daa1d690 100644 --- a/src/api/burn/test/BalUtilUnitTest/TestBootstrapperApplication.cpp +++ b/src/api/burn/test/BalUtilUnitTest/TestBootstrapperApplication.cpp | |||
@@ -8,9 +8,8 @@ class CTestBootstrapperApplication : public CBalBaseBootstrapperApplication | |||
8 | { | 8 | { |
9 | public: | 9 | public: |
10 | CTestBootstrapperApplication( | 10 | CTestBootstrapperApplication( |
11 | __in IBootstrapperEngine* pEngine, | 11 | __in IBootstrapperEngine* pEngine |
12 | __in const BOOTSTRAPPER_CREATE_ARGS* pArgs | 12 | ) : CBalBaseBootstrapperApplication(pEngine) |
13 | ) : CBalBaseBootstrapperApplication(pEngine, pArgs) | ||
14 | { | 13 | { |
15 | } | 14 | } |
16 | }; | 15 | }; |
@@ -25,9 +24,12 @@ HRESULT CreateBootstrapperApplication( | |||
25 | HRESULT hr = S_OK; | 24 | HRESULT hr = S_OK; |
26 | CTestBootstrapperApplication* pApplication = NULL; | 25 | CTestBootstrapperApplication* pApplication = NULL; |
27 | 26 | ||
28 | pApplication = new CTestBootstrapperApplication(pEngine, pArgs); | 27 | pApplication = new CTestBootstrapperApplication(pEngine); |
29 | ExitOnNull(pApplication, hr, E_OUTOFMEMORY, "Failed to create new test bootstrapper application object."); | 28 | ExitOnNull(pApplication, hr, E_OUTOFMEMORY, "Failed to create new test bootstrapper application object."); |
30 | 29 | ||
30 | hr = pApplication->Initialize(pArgs); | ||
31 | ExitOnFailure(hr, "CTestBootstrapperApplication initialization failed."); | ||
32 | |||
31 | pResults->pfnBootstrapperApplicationProc = BalBaseBootstrapperApplicationProc; | 33 | pResults->pfnBootstrapperApplicationProc = BalBaseBootstrapperApplicationProc; |
32 | pResults->pvBootstrapperApplicationProcContext = pApplication; | 34 | pResults->pvBootstrapperApplicationProcContext = pApplication; |
33 | *ppApplication = pApplication; | 35 | *ppApplication = pApplication; |
diff --git a/src/api/burn/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs b/src/api/burn/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs index b49b3927..8705ed13 100644 --- a/src/api/burn/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs +++ b/src/api/burn/test/WixToolsetTest.Mba.Core/BaseBootstrapperApplicationFactoryFixture.cs | |||
@@ -101,7 +101,6 @@ namespace WixToolsetTest.Mba.Core | |||
101 | public int cbSize; | 101 | public int cbSize; |
102 | public LaunchAction action; | 102 | public LaunchAction action; |
103 | public Display display; | 103 | public Display display; |
104 | public Restart restart; | ||
105 | [MarshalAs(UnmanagedType.LPWStr)] public string wzCommandLine; | 104 | [MarshalAs(UnmanagedType.LPWStr)] public string wzCommandLine; |
106 | public int nCmdShow; | 105 | public int nCmdShow; |
107 | public ResumeType resume; | 106 | public ResumeType resume; |