diff options
Diffstat (limited to 'src')
31 files changed, 446 insertions, 120 deletions
diff --git a/src/ext/ComPlus/ca/cpapproleexec.cpp b/src/ext/ComPlus/ca/cpapproleexec.cpp index e3b71e93..4b38b23c 100644 --- a/src/ext/ComPlus/ca/cpapproleexec.cpp +++ b/src/ext/ComPlus/ca/cpapproleexec.cpp | |||
@@ -74,7 +74,7 @@ HRESULT CpiConfigureApplicationRoles( | |||
74 | hr = CpiActionStartMessage(ppwzData, FALSE); | 74 | hr = CpiActionStartMessage(ppwzData, FALSE); |
75 | ExitOnFailure(hr, "Failed to send action start message"); | 75 | ExitOnFailure(hr, "Failed to send action start message"); |
76 | 76 | ||
77 | // ger count | 77 | // get count |
78 | int iCnt = 0; | 78 | int iCnt = 0; |
79 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); | 79 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); |
80 | ExitOnFailure(hr, "Failed to read count"); | 80 | ExitOnFailure(hr, "Failed to read count"); |
@@ -218,7 +218,7 @@ HRESULT CpiConfigureUsersInApplicationRoles( | |||
218 | hr = CpiActionStartMessage(ppwzData, FALSE); | 218 | hr = CpiActionStartMessage(ppwzData, FALSE); |
219 | ExitOnFailure(hr, "Failed to send action start message"); | 219 | ExitOnFailure(hr, "Failed to send action start message"); |
220 | 220 | ||
221 | // ger count | 221 | // get count |
222 | int iCnt = 0; | 222 | int iCnt = 0; |
223 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); | 223 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); |
224 | ExitOnFailure(hr, "Failed to read count"); | 224 | ExitOnFailure(hr, "Failed to read count"); |
diff --git a/src/ext/ComPlus/ca/cpapprolesched.cpp b/src/ext/ComPlus/ca/cpapprolesched.cpp index 04de6b65..a92c340c 100644 --- a/src/ext/ComPlus/ca/cpapprolesched.cpp +++ b/src/ext/ComPlus/ca/cpapprolesched.cpp | |||
@@ -10,13 +10,13 @@ LPCWSTR vcsApplicationRoleQuery = | |||
10 | enum eApplicationRoleQuery { arqApplicationRole = 1, arqApplication, arqComponent, arqName }; | 10 | enum eApplicationRoleQuery { arqApplicationRole = 1, arqApplication, arqComponent, arqName }; |
11 | 11 | ||
12 | LPCWSTR vcsUserInApplicationRoleQuery = | 12 | LPCWSTR vcsUserInApplicationRoleQuery = |
13 | L"SELECT `UserInApplicationRole`, `ApplicationRole_`, `ComPlusUserInApplicationRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusUserInApplicationRole`, `Wix4User` WHERE `User_` = `User`"; | 13 | L"SELECT `UserInApplicationRole`, `ApplicationRole_`, `Wix4ComPlusUserInAppRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusUserInAppRole`, `Wix4User` WHERE `User_` = `User`"; |
14 | LPCWSTR vcsGroupInApplicationRoleQuery = | 14 | LPCWSTR vcsGroupInApplicationRoleQuery = |
15 | L"SELECT `GroupInApplicationRole`, `ApplicationRole_`, `ComPlusGroupInApplicationRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusGroupInApplicationRole`, `Wix4Group` WHERE `Group_` = `Group`"; | 15 | L"SELECT `GroupInApplicationRole`, `ApplicationRole_`, `Wix4ComPlusGroupInAppRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusGroupInAppRole`, `Wix4Group` WHERE `Group_` = `Group`"; |
16 | enum eTrusteeInApplicationRoleQuery { tiarqUserInApplicationRole = 1, tiarqApplicationRole, tiarqComponent, tiarqDomain, tiarqName }; | 16 | enum eTrusteeInApplicationRoleQuery { tiarqUserInApplicationRole = 1, tiarqApplicationRole, tiarqComponent, tiarqDomain, tiarqName }; |
17 | 17 | ||
18 | LPCWSTR vcsApplicationRolePropertyQuery = | 18 | LPCWSTR vcsApplicationRolePropertyQuery = |
19 | L"SELECT `Name`, `Value` FROM `Wix4ComPlusApplicationRoleProperty` WHERE `ApplicationRole_` = ?"; | 19 | L"SELECT `Name`, `Value` FROM `Wix4ComPlusAppRoleProperty` WHERE `ApplicationRole_` = ?"; |
20 | 20 | ||
21 | 21 | ||
22 | // property definitions | 22 | // property definitions |
@@ -95,7 +95,7 @@ HRESULT CpiApplicationRolesRead( | |||
95 | 95 | ||
96 | // loop through all application roles | 96 | // loop through all application roles |
97 | hr = WcaOpenExecuteView(vcsApplicationRoleQuery, &hView); | 97 | hr = WcaOpenExecuteView(vcsApplicationRoleQuery, &hView); |
98 | ExitOnFailure(hr, "Failed to execute view on ComPlusApplicationRole table"); | 98 | ExitOnFailure(hr, "Failed to execute view on Wix4ComPlusApplicationRole table"); |
99 | 99 | ||
100 | while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) | 100 | while (S_OK == (hr = WcaFetchRecord(hView, &hRec))) |
101 | { | 101 | { |
@@ -205,7 +205,7 @@ HRESULT CpiApplicationRolesVerifyInstall( | |||
205 | if (!pItm->fReferencedForInstall && !(pItm->fHasComponent && WcaIsInstalling(pItm->isInstalled, pItm->isAction))) | 205 | if (!pItm->fReferencedForInstall && !(pItm->fHasComponent && WcaIsInstalling(pItm->isInstalled, pItm->isAction))) |
206 | continue; | 206 | continue; |
207 | 207 | ||
208 | // if the role is referensed and is not a locater, it must be installed | 208 | // if the role is referenced and is not a locater, it must be installed |
209 | if (pItm->fReferencedForInstall && pItm->fHasComponent && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) | 209 | if (pItm->fReferencedForInstall && pItm->fHasComponent && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) |
210 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusApplicationRoleDependency, "An application role is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); | 210 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusApplicationRoleDependency, "An application role is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); |
211 | 211 | ||
@@ -235,7 +235,7 @@ HRESULT CpiApplicationRolesVerifyInstall( | |||
235 | switch (er) | 235 | switch (er) |
236 | { | 236 | { |
237 | case IDABORT: | 237 | case IDABORT: |
238 | ExitOnFailure(hr = E_FAIL, "An application with a conflictiong name exists, key: %S", pItm->wzKey); | 238 | ExitOnFailure(hr = E_FAIL, "An application with a conflicting name exists, key: %S", pItm->wzKey); |
239 | break; | 239 | break; |
240 | case IDRETRY: | 240 | case IDRETRY: |
241 | break; | 241 | break; |
@@ -319,7 +319,7 @@ HRESULT CpiApplicationRolesInstall( | |||
319 | int iActionType; | 319 | int iActionType; |
320 | 320 | ||
321 | // add action text | 321 | // add action text |
322 | hr = CpiAddActionTextToActionData(L"CreateComPlusApplicationRoles", ppwzActionData); | 322 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"CreateComPlusApplicationRoles"), ppwzActionData); |
323 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 323 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
324 | 324 | ||
325 | // add count to action data | 325 | // add count to action data |
@@ -371,7 +371,7 @@ HRESULT CpiApplicationRolesUninstall( | |||
371 | int iActionType; | 371 | int iActionType; |
372 | 372 | ||
373 | // add action text | 373 | // add action text |
374 | hr = CpiAddActionTextToActionData(L"RemoveComPlusApplicationRoles", ppwzActionData); | 374 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"RemoveComPlusApplicationRoles"), ppwzActionData); |
375 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 375 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
376 | 376 | ||
377 | // add count to action data | 377 | // add count to action data |
@@ -477,7 +477,7 @@ HRESULT CpiUsersInApplicationRolesInstall( | |||
477 | int iActionType; | 477 | int iActionType; |
478 | 478 | ||
479 | // add action text | 479 | // add action text |
480 | hr = CpiAddActionTextToActionData(L"AddUsersToComPlusApplicationRoles", ppwzActionData); | 480 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"AddUsersToComPlusApplicationRoles"), ppwzActionData); |
481 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 481 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
482 | 482 | ||
483 | // add count to action data | 483 | // add count to action data |
@@ -529,7 +529,7 @@ HRESULT CpiUsersInApplicationRolesUninstall( | |||
529 | int iActionType; | 529 | int iActionType; |
530 | 530 | ||
531 | // add action text | 531 | // add action text |
532 | hr = CpiAddActionTextToActionData(L"RemoveUsersFromComPlusAppRoles", ppwzActionData); | 532 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"RemoveUsersFromComPlusAppRoles"), ppwzActionData); |
533 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 533 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
534 | 534 | ||
535 | // add count to action data | 535 | // add count to action data |
diff --git a/src/ext/ComPlus/ca/cpappsched.cpp b/src/ext/ComPlus/ca/cpappsched.cpp index 4d867f6b..bcd3bb75 100644 --- a/src/ext/ComPlus/ca/cpappsched.cpp +++ b/src/ext/ComPlus/ca/cpappsched.cpp | |||
@@ -255,7 +255,7 @@ HRESULT CpiApplicationsVerifyInstall( | |||
255 | if (!pItm->fReferencedForInstall && !(pItm->fHasComponent && WcaIsInstalling(pItm->isInstalled, pItm->isAction))) | 255 | if (!pItm->fReferencedForInstall && !(pItm->fHasComponent && WcaIsInstalling(pItm->isInstalled, pItm->isAction))) |
256 | continue; | 256 | continue; |
257 | 257 | ||
258 | // if the application is referensed and is not a locater, it must be installed | 258 | // if the application is referenced and is not a locater, it must be installed |
259 | if (pItm->fReferencedForInstall && pItm->fHasComponent && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) | 259 | if (pItm->fReferencedForInstall && pItm->fHasComponent && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) |
260 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusApplicationDependency, "An application is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); | 260 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusApplicationDependency, "An application is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); |
261 | 261 | ||
diff --git a/src/ext/ComPlus/ca/cpasmexec.cpp b/src/ext/ComPlus/ca/cpasmexec.cpp index 3d140027..af6c7eff 100644 --- a/src/ext/ComPlus/ca/cpasmexec.cpp +++ b/src/ext/ComPlus/ca/cpasmexec.cpp | |||
@@ -1,7 +1,7 @@ | |||
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. | 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 | 2 | ||
3 | #include "precomp.h" | 3 | #include "precomp.h" |
4 | 4 | #include <mscoree.h> | |
5 | 5 | ||
6 | // GAC related declarations | 6 | // GAC related declarations |
7 | 7 | ||
@@ -61,13 +61,11 @@ public: | |||
61 | 61 | ||
62 | typedef HRESULT (__stdcall *LoadLibraryShimFunc)(LPCWSTR szDllName, LPCWSTR szVersion, LPVOID pvReserved, HMODULE *phModDll); | 62 | typedef HRESULT (__stdcall *LoadLibraryShimFunc)(LPCWSTR szDllName, LPCWSTR szVersion, LPVOID pvReserved, HMODULE *phModDll); |
63 | typedef HRESULT (__stdcall *CreateAssemblyCacheFunc)(IAssemblyCache **ppAsmCache, DWORD dwReserved); | 63 | typedef HRESULT (__stdcall *CreateAssemblyCacheFunc)(IAssemblyCache **ppAsmCache, DWORD dwReserved); |
64 | typedef HRESULT (__stdcall *GetFileVersionFnPtr)(LPCWSTR szFilename, _Out_writes_to_opt_(cchBuffer, *dwLength) LPWSTR szBuffer, DWORD cchBuffer, DWORD* dwLength); | ||
65 | typedef HRESULT (__stdcall *CorBindToRuntimeExFnPtr)(LPCWSTR pwszVersion, LPCWSTR pwszBuildFlavor, DWORD startupFlags, REFCLSID rclsid, REFIID riid, LPVOID FAR* ppv); | ||
64 | 66 | ||
65 | 67 | ||
66 | // RegistrationHelper related declarations | 68 | // RegistrationHelper related declarations |
67 | |||
68 | static const GUID CLSID_RegistrationHelper = | ||
69 | { 0x89a86e7b, 0xc229, 0x4008, { 0x9b, 0xaa, 0x2f, 0x5c, 0x84, 0x11, 0xd7, 0xe0 } }; | ||
70 | |||
71 | enum eInstallationFlags { | 69 | enum eInstallationFlags { |
72 | ifConfigureComponentsOnly = 16, | 70 | ifConfigureComponentsOnly = 16, |
73 | ifFindOrCreateTargetApplication = 4, | 71 | ifFindOrCreateTargetApplication = 4, |
@@ -156,7 +154,8 @@ static HRESULT UnregisterAssembly( | |||
156 | static void InitAssemblyExec(); | 154 | static void InitAssemblyExec(); |
157 | static void UninitAssemblyExec(); | 155 | static void UninitAssemblyExec(); |
158 | static HRESULT GetRegistrationHelper( | 156 | static HRESULT GetRegistrationHelper( |
159 | IDispatch** ppiRegHlp | 157 | IDispatch** ppiRegHlp, |
158 | LPCWSTR pwzAssemblyPath | ||
160 | ); | 159 | ); |
161 | static HRESULT GetAssemblyCacheObject( | 160 | static HRESULT GetAssemblyCacheObject( |
162 | IAssemblyCache** ppAssemblyCache | 161 | IAssemblyCache** ppAssemblyCache |
@@ -722,15 +721,44 @@ static void UninitAssemblyExec() | |||
722 | } | 721 | } |
723 | 722 | ||
724 | static HRESULT GetRegistrationHelper( | 723 | static HRESULT GetRegistrationHelper( |
725 | IDispatch** ppiRegHlp | 724 | IDispatch** ppiRegHlp, |
725 | LPCWSTR pwzAssemblyPath | ||
726 | ) | 726 | ) |
727 | { | 727 | { |
728 | HRESULT hr = S_OK; | 728 | HRESULT hr = S_OK; |
729 | wchar_t pwzVersion[MAX_PATH]; | ||
730 | DWORD pcchVersionLen = MAX_PATH; | ||
731 | ICLRRuntimeHost* runtimeHost = NULL; | ||
732 | |||
733 | if (!ghMscoree) | ||
734 | { | ||
735 | ghMscoree = ::LoadLibraryW(L"mscoree.dll"); | ||
736 | ExitOnNull(ghMscoree, hr, E_FAIL, "Failed to load mscoree.dll"); | ||
737 | } | ||
738 | GetFileVersionFnPtr GetFileVersion = (GetFileVersionFnPtr)::GetProcAddress(ghMscoree, "GetFileVersion"); | ||
739 | ExitOnNull(GetFileVersion, hr, E_FAIL, "Failed to GetProcAddress for 'GetFileVersion' from 'mscoree.dll'"); | ||
740 | hr = GetFileVersion(pwzAssemblyPath, pwzVersion, pcchVersionLen, &pcchVersionLen); | ||
729 | 741 | ||
730 | if (!gpiRegHlp) | 742 | if (!gpiRegHlp) |
731 | { | 743 | { |
744 | CLSID CLSID_RegistrationHelper{}; | ||
745 | hr = ::CLSIDFromProgID(OLESTR("System.EnterpriseServices.RegistrationHelper"), &CLSID_RegistrationHelper); | ||
746 | ExitOnFailure(hr, "Failed to identify CLSID for 'System.EnterpriseServices.RegistrationHelper'"); | ||
747 | |||
748 | // NOTE: The 'CoreBindToRuntimeEx' method is DEPRECATED in .NET v4. | ||
749 | // HOWEVER, we might be running in an earlier context at this point so we don't want to rely upon stuff that is particularly v4 dependent. | ||
750 | // Even if we are about to try to fire up a v4 runtime. | ||
751 | // The .NET v4 runtime with STARTUP_LOADER_SAFEMODE flag (to disable version checking of loaded assemblies) is what lets us launch the | ||
752 | // RegistrationHelper. The v4 RegistrationHelper is able to register both v4 and v3 assemblies however, so if we can get it, we most as well | ||
753 | // use it. | ||
754 | CorBindToRuntimeExFnPtr CorBindToRuntimeEx = (CorBindToRuntimeExFnPtr)::GetProcAddress(ghMscoree, "CorBindToRuntimeEx"); | ||
755 | hr = CorBindToRuntimeEx(L"v4.0.30319", L"wks", STARTUP_LOADER_SAFEMODE, CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (LPVOID*)&runtimeHost); | ||
756 | // we ignore the HRESULT here. If it worked, great, we'll use it moving forward. If it didn't work, we'll end up trying to resort to legacy .NET FW | ||
757 | // when we just try the COM Create below | ||
758 | |||
732 | // create registration helper object | 759 | // create registration helper object |
733 | hr = ::CoCreateInstance(CLSID_RegistrationHelper, NULL, CLSCTX_ALL, IID_IDispatch, (void**)&gpiRegHlp); | 760 | // This will be created in the .NET FW 4 version if we managed to launch it above, or in the .NET FW <4 version based on the COM dispatch otherwise |
761 | hr = ::CoCreateInstance(CLSID_RegistrationHelper, NULL, CLSCTX_ALL, IID_IDispatch, (void**)&gpiRegHlp); | ||
734 | ExitOnFailure(hr, "Failed to create registration helper object"); | 762 | ExitOnFailure(hr, "Failed to create registration helper object"); |
735 | } | 763 | } |
736 | 764 | ||
@@ -883,7 +911,7 @@ static HRESULT RegisterDotNetAssembly( | |||
883 | } | 911 | } |
884 | 912 | ||
885 | // get registration helper object | 913 | // get registration helper object |
886 | hr = GetRegistrationHelper(&piRegHlp); | 914 | hr = GetRegistrationHelper(&piRegHlp, pAttrs->pwzDllPath); |
887 | ExitOnFailure(hr, "Failed to get registration helper object"); | 915 | ExitOnFailure(hr, "Failed to get registration helper object"); |
888 | 916 | ||
889 | // get dispatch id of InstallAssembly() method | 917 | // get dispatch id of InstallAssembly() method |
@@ -979,7 +1007,7 @@ static HRESULT RegisterNativeAssembly( | |||
979 | ExitOnNull(bstrTlbPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for tlb path"); | 1007 | ExitOnNull(bstrTlbPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for tlb path"); |
980 | 1008 | ||
981 | bstrPSDllPath = ::SysAllocString(pAttrs->pwzPSDllPath ? pAttrs->pwzPSDllPath : L""); | 1009 | bstrPSDllPath = ::SysAllocString(pAttrs->pwzPSDllPath ? pAttrs->pwzPSDllPath : L""); |
982 | ExitOnNull(bstrPSDllPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for tlb path"); | 1010 | ExitOnNull(bstrPSDllPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for proxy/stub dll path"); |
983 | 1011 | ||
984 | // get catalog | 1012 | // get catalog |
985 | hr = CpiExecGetAdminCatalog(&piCatalog); | 1013 | hr = CpiExecGetAdminCatalog(&piCatalog); |
@@ -1089,7 +1117,7 @@ static HRESULT UnregisterDotNetAssembly( | |||
1089 | ExitOnNull(bstrDllPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for dll path"); | 1117 | ExitOnNull(bstrDllPath, hr, E_OUTOFMEMORY, "Failed to allocate BSTR for dll path"); |
1090 | 1118 | ||
1091 | // get registration helper object | 1119 | // get registration helper object |
1092 | hr = GetRegistrationHelper(&piRegHlp); | 1120 | hr = GetRegistrationHelper(&piRegHlp, pAttrs->pwzDllPath); |
1093 | ExitOnFailure(hr, "Failed to get registration helper object"); | 1121 | ExitOnFailure(hr, "Failed to get registration helper object"); |
1094 | 1122 | ||
1095 | // get dispatch id of UninstallAssembly() method | 1123 | // get dispatch id of UninstallAssembly() method |
diff --git a/src/ext/ComPlus/ca/cpasmsched.cpp b/src/ext/ComPlus/ca/cpasmsched.cpp index 325808de..044b2ef8 100644 --- a/src/ext/ComPlus/ca/cpasmsched.cpp +++ b/src/ext/ComPlus/ca/cpasmsched.cpp | |||
@@ -408,7 +408,7 @@ HRESULT CpiAssembliesVerifyInstall( | |||
408 | if (!pItm->fReferencedForInstall && !pItm->iRoleAssignmentsInstallCount && !WcaIsInstalling(pItm->isInstalled, pItm->isAction)) | 408 | if (!pItm->fReferencedForInstall && !pItm->iRoleAssignmentsInstallCount && !WcaIsInstalling(pItm->isInstalled, pItm->isAction)) |
409 | continue; | 409 | continue; |
410 | 410 | ||
411 | // if the assembly is referensed, it must be installed | 411 | // if the assembly is referenced, it must be installed |
412 | if ((pItm->fReferencedForInstall || pItm->iRoleAssignmentsInstallCount) && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) | 412 | if ((pItm->fReferencedForInstall || pItm->iRoleAssignmentsInstallCount) && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) |
413 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusAssemblyDependency, "An assembly is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); | 413 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusAssemblyDependency, "An assembly is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); |
414 | } | 414 | } |
diff --git a/src/ext/ComPlus/ca/cpexec.cpp b/src/ext/ComPlus/ca/cpexec.cpp index 9b1691fc..a915dd34 100644 --- a/src/ext/ComPlus/ca/cpexec.cpp +++ b/src/ext/ComPlus/ca/cpexec.cpp | |||
@@ -180,7 +180,7 @@ LExit: | |||
180 | if (INVALID_HANDLE_VALUE != hRollbackFile) | 180 | if (INVALID_HANDLE_VALUE != hRollbackFile) |
181 | ::CloseHandle(hRollbackFile); | 181 | ::CloseHandle(hRollbackFile); |
182 | 182 | ||
183 | // unitialize | 183 | // uninitialize |
184 | CpiExecFinalize(); | 184 | CpiExecFinalize(); |
185 | 185 | ||
186 | if (fInitializedCom) | 186 | if (fInitializedCom) |
@@ -258,7 +258,7 @@ LExit: | |||
258 | if (INVALID_HANDLE_VALUE != hRollbackFile) | 258 | if (INVALID_HANDLE_VALUE != hRollbackFile) |
259 | ::CloseHandle(hRollbackFile); | 259 | ::CloseHandle(hRollbackFile); |
260 | 260 | ||
261 | // unitialize | 261 | // uninitialize |
262 | CpiExecFinalize(); | 262 | CpiExecFinalize(); |
263 | 263 | ||
264 | if (fInitializedCom) | 264 | if (fInitializedCom) |
@@ -415,7 +415,7 @@ LExit: | |||
415 | if (prdSubscriptions) | 415 | if (prdSubscriptions) |
416 | CpiFreeRollbackDataList(prdSubscriptions); | 416 | CpiFreeRollbackDataList(prdSubscriptions); |
417 | 417 | ||
418 | // unitialize | 418 | // uninitialize |
419 | CpiExecFinalize(); | 419 | CpiExecFinalize(); |
420 | 420 | ||
421 | if (fInitializedCom) | 421 | if (fInitializedCom) |
@@ -521,7 +521,7 @@ LExit: | |||
521 | if (INVALID_HANDLE_VALUE != hRollbackFile) | 521 | if (INVALID_HANDLE_VALUE != hRollbackFile) |
522 | ::CloseHandle(hRollbackFile); | 522 | ::CloseHandle(hRollbackFile); |
523 | 523 | ||
524 | // unitialize | 524 | // uninitialize |
525 | CpiExecFinalize(); | 525 | CpiExecFinalize(); |
526 | 526 | ||
527 | if (fInitializedCom) | 527 | if (fInitializedCom) |
@@ -670,7 +670,7 @@ LExit: | |||
670 | if (prdSubscriptions) | 670 | if (prdSubscriptions) |
671 | CpiFreeRollbackDataList(prdSubscriptions); | 671 | CpiFreeRollbackDataList(prdSubscriptions); |
672 | 672 | ||
673 | // unitialize | 673 | // uninitialize |
674 | CpiExecFinalize(); | 674 | CpiExecFinalize(); |
675 | 675 | ||
676 | if (fInitializedCom) | 676 | if (fInitializedCom) |
diff --git a/src/ext/ComPlus/ca/cppartexec.cpp b/src/ext/ComPlus/ca/cppartexec.cpp index 673bdaf9..06aa16f4 100644 --- a/src/ext/ComPlus/ca/cppartexec.cpp +++ b/src/ext/ComPlus/ca/cppartexec.cpp | |||
@@ -34,6 +34,7 @@ static HRESULT ReadPartitionAttributes( | |||
34 | static void FreePartitionAttributes( | 34 | static void FreePartitionAttributes( |
35 | CPI_PARTITION_ATTRIBUTES* pAttrs | 35 | CPI_PARTITION_ATTRIBUTES* pAttrs |
36 | ); | 36 | ); |
37 | static HRESULT CpiEnsurePartitionsEnabled(); | ||
37 | static HRESULT CreatePartition( | 38 | static HRESULT CreatePartition( |
38 | CPI_PARTITION_ATTRIBUTES* pAttrs | 39 | CPI_PARTITION_ATTRIBUTES* pAttrs |
39 | ); | 40 | ); |
@@ -71,7 +72,7 @@ HRESULT CpiConfigurePartitions( | |||
71 | hr = CpiActionStartMessage(ppwzData, FALSE); | 72 | hr = CpiActionStartMessage(ppwzData, FALSE); |
72 | ExitOnFailure(hr, "Failed to send action start message"); | 73 | ExitOnFailure(hr, "Failed to send action start message"); |
73 | 74 | ||
74 | // ger partition count | 75 | // get partition count |
75 | int iCnt = 0; | 76 | int iCnt = 0; |
76 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); | 77 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); |
77 | ExitOnFailure(hr, "Failed to read count"); | 78 | ExitOnFailure(hr, "Failed to read count"); |
@@ -215,7 +216,7 @@ HRESULT CpiConfigurePartitionUsers( | |||
215 | hr = CpiActionStartMessage(ppwzData, FALSE); | 216 | hr = CpiActionStartMessage(ppwzData, FALSE); |
216 | ExitOnFailure(hr, "Failed to send action start message"); | 217 | ExitOnFailure(hr, "Failed to send action start message"); |
217 | 218 | ||
218 | // ger partition count | 219 | // get partition count |
219 | int iCnt = 0; | 220 | int iCnt = 0; |
220 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); | 221 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); |
221 | ExitOnFailure(hr, "Failed to read count"); | 222 | ExitOnFailure(hr, "Failed to read count"); |
@@ -384,6 +385,69 @@ static void FreePartitionAttributes( | |||
384 | CpiFreePropertyList(pAttrs->pPropList); | 385 | CpiFreePropertyList(pAttrs->pPropList); |
385 | } | 386 | } |
386 | 387 | ||
388 | static HRESULT CpiEnsurePartitionsEnabled() | ||
389 | { | ||
390 | HRESULT hr = S_OK; | ||
391 | |||
392 | ICatalogCollection* piLocalComputerColl = NULL; | ||
393 | IDispatch* piDisp = NULL; | ||
394 | ICatalogObject* piLocalComputerObj = NULL; | ||
395 | VARIANT vtVal; | ||
396 | BSTR bsPartitionsEnabledName = ::SysAllocString(L"PartitionsEnabled"); | ||
397 | long numChanges = 0; | ||
398 | |||
399 | ::VariantInit(&vtVal); | ||
400 | |||
401 | // get collection | ||
402 | hr = CpiExecGetCatalogCollection(L"LocalComputer", &piLocalComputerColl); | ||
403 | ExitOnFailure(hr, "Failed to get catalog collection"); | ||
404 | |||
405 | // find object, there will be only one in the LocalComputer collection | ||
406 | hr = piLocalComputerColl->get_Item(0, &piDisp); | ||
407 | ExitOnFailure(hr, "Failed to get object from collection"); | ||
408 | |||
409 | hr = piDisp->QueryInterface(IID_ICatalogObject, (void**)&piLocalComputerObj); | ||
410 | ExitOnFailure(hr, "Failed to get IID_ICatalogObject interface"); | ||
411 | |||
412 | // and then we get the value of the PartitionsEnabled property | ||
413 | hr = piLocalComputerObj->get_Value(bsPartitionsEnabledName, &vtVal); | ||
414 | if (!vtVal.boolVal) | ||
415 | { | ||
416 | vtVal.boolVal = true; | ||
417 | hr = piLocalComputerObj->put_Value(bsPartitionsEnabledName, vtVal); | ||
418 | ExitOnFailure(hr, "Failed to put value to Enable COM+ PartitionsEnabled property"); | ||
419 | hr = piLocalComputerColl->SaveChanges(&numChanges); | ||
420 | ExitOnFailure(hr, "Failed to save PartitionsEnabled property"); | ||
421 | |||
422 | // we'll read back the hopefully updated values of the PartitionsEnabled property | ||
423 | // if it's still False, then we're on a Windows Desktop that doesn't allow Partitions | ||
424 | // (as of Windows Server2003 Microsoft limited Partitions to only ServerOS platforms) | ||
425 | hr = piLocalComputerObj->get_Value(bsPartitionsEnabledName, &vtVal); | ||
426 | ExitOnFailure(hr, "Failed to read PartitionsEnabled property"); | ||
427 | } | ||
428 | |||
429 | if (vtVal.boolVal) | ||
430 | { | ||
431 | // everything went well, we have the Partitioning available | ||
432 | hr = S_OK; | ||
433 | } | ||
434 | else | ||
435 | { | ||
436 | // we're on a Desktop OS, or couldn't otherwise enable partitioning | ||
437 | WcaLog(LOGMSG_STANDARD, "Failed to Enable COM+ PartitionEnabled property. This suggests Partitioning was attempted on a Desktop OS, which is not supported"); | ||
438 | hr = S_FALSE; | ||
439 | } | ||
440 | |||
441 | LExit: | ||
442 | // clean up | ||
443 | ReleaseObject(piLocalComputerColl); | ||
444 | ReleaseObject(piLocalComputerObj); | ||
445 | ReleaseBSTR(bsPartitionsEnabledName); | ||
446 | ::VariantClear(&vtVal); | ||
447 | |||
448 | return hr; | ||
449 | } | ||
450 | |||
387 | static HRESULT CreatePartition( | 451 | static HRESULT CreatePartition( |
388 | CPI_PARTITION_ATTRIBUTES* pAttrs | 452 | CPI_PARTITION_ATTRIBUTES* pAttrs |
389 | ) | 453 | ) |
@@ -408,6 +472,9 @@ static HRESULT CreatePartition( | |||
408 | 472 | ||
409 | if (S_FALSE == hr) | 473 | if (S_FALSE == hr) |
410 | { | 474 | { |
475 | hr = CpiEnsurePartitionsEnabled(); | ||
476 | ExitOnFailure(hr, "Failed to enable partitions"); | ||
477 | |||
411 | // create partition | 478 | // create partition |
412 | hr = CpiAddCollectionObject(piPartColl, &piPartObj); | 479 | hr = CpiAddCollectionObject(piPartColl, &piPartObj); |
413 | ExitOnFailure(hr, "Failed to add partition to collection"); | 480 | ExitOnFailure(hr, "Failed to add partition to collection"); |
diff --git a/src/ext/ComPlus/ca/cppartroleexec.cpp b/src/ext/ComPlus/ca/cppartroleexec.cpp index 4a503c79..910473e0 100644 --- a/src/ext/ComPlus/ca/cppartroleexec.cpp +++ b/src/ext/ComPlus/ca/cppartroleexec.cpp | |||
@@ -49,7 +49,7 @@ HRESULT CpiConfigureUsersInPartitionRoles( | |||
49 | hr = CpiActionStartMessage(ppwzData, FALSE); | 49 | hr = CpiActionStartMessage(ppwzData, FALSE); |
50 | ExitOnFailure(hr, "Failed to send action start message"); | 50 | ExitOnFailure(hr, "Failed to send action start message"); |
51 | 51 | ||
52 | // ger count | 52 | // get count |
53 | int iCnt = 0; | 53 | int iCnt = 0; |
54 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); | 54 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); |
55 | ExitOnFailure(hr, "Failed to read count"); | 55 | ExitOnFailure(hr, "Failed to read count"); |
diff --git a/src/ext/ComPlus/ca/cppartrolesched.cpp b/src/ext/ComPlus/ca/cppartrolesched.cpp index 0ca4bf0c..b2fb5118 100644 --- a/src/ext/ComPlus/ca/cppartrolesched.cpp +++ b/src/ext/ComPlus/ca/cppartrolesched.cpp | |||
@@ -10,9 +10,9 @@ LPCWSTR vcsPartitionRoleQuery = | |||
10 | enum ePartitionRoleQuery { prqPartitionRole = 1, prqPartition, prqComponent, prqName }; | 10 | enum ePartitionRoleQuery { prqPartitionRole = 1, prqPartition, prqComponent, prqName }; |
11 | 11 | ||
12 | LPCWSTR vcsUserInPartitionRoleQuery = | 12 | LPCWSTR vcsUserInPartitionRoleQuery = |
13 | L"SELECT `UserInPartitionRole`, `PartitionRole_`, `ComPlusUserInPartitionRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusUserInPartitionRole`, `Wix4User` WHERE `User_` = `User`"; | 13 | L"SELECT `UserInPartitionRole`, `PartitionRole_`, `Wix4ComPlusUserInPartitionRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusUserInPartitionRole`, `Wix4User` WHERE `User_` = `User`"; |
14 | LPCWSTR vcsGroupInPartitionRoleQuery = | 14 | LPCWSTR vcsGroupInPartitionRoleQuery = |
15 | L"SELECT `GroupInPartitionRole`, `PartitionRole_`, `ComPlusGroupInPartitionRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusGroupInPartitionRole`, `Wix4Group` WHERE `Group_` = `Group`"; | 15 | L"SELECT `GroupInPartitionRole`, `PartitionRole_`, `Wix4ComPlusGroupInPartitionRole`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusGroupInPartitionRole`, `Wix4Group` WHERE `Group_` = `Group`"; |
16 | enum eTrusteeInPartitionRoleQuery { tiprqUserInPartitionRole = 1, tiprqPartitionRole, tiprqComponent, tiprqDomain, tiprqName }; | 16 | enum eTrusteeInPartitionRoleQuery { tiprqUserInPartitionRole = 1, tiprqPartitionRole, tiprqComponent, tiprqDomain, tiprqName }; |
17 | 17 | ||
18 | 18 | ||
diff --git a/src/ext/ComPlus/ca/cppartsched.cpp b/src/ext/ComPlus/ca/cppartsched.cpp index d4065d34..b4c1c314 100644 --- a/src/ext/ComPlus/ca/cppartsched.cpp +++ b/src/ext/ComPlus/ca/cppartsched.cpp | |||
@@ -13,7 +13,7 @@ LPCWSTR vcsPartitionPropertyQuery = | |||
13 | L"SELECT `Name`, `Value` FROM `Wix4ComPlusPartitionProperty` WHERE `Partition_` = ?"; | 13 | L"SELECT `Name`, `Value` FROM `Wix4ComPlusPartitionProperty` WHERE `Partition_` = ?"; |
14 | 14 | ||
15 | LPCWSTR vcsPartitionUserQuery = | 15 | LPCWSTR vcsPartitionUserQuery = |
16 | L"SELECT `PartitionUser`, `Partition_`, `ComPlusPartitionUser`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusPartitionUser`, `Wix4User` WHERE `User_` = `User`"; | 16 | L"SELECT `PartitionUser`, `Partition_`, `Wix4ComPlusPartitionUser`.`Component_`, `Domain`, `Name` FROM `Wix4ComPlusPartitionUser`, `Wix4User` WHERE `User_` = `User`"; |
17 | enum ePartitionUserQuery { puqPartitionUser = 1, puqPartition, puqComponent, puqDomain, puqName }; | 17 | enum ePartitionUserQuery { puqPartitionUser = 1, puqPartition, puqComponent, puqDomain, puqName }; |
18 | 18 | ||
19 | 19 | ||
@@ -192,7 +192,7 @@ HRESULT CpiPartitionsVerifyInstall( | |||
192 | if (!pItm->fReferencedForInstall && !(pItm->fHasComponent && WcaIsInstalling(pItm->isInstalled, pItm->isAction))) | 192 | if (!pItm->fReferencedForInstall && !(pItm->fHasComponent && WcaIsInstalling(pItm->isInstalled, pItm->isAction))) |
193 | continue; | 193 | continue; |
194 | 194 | ||
195 | // if the partition is referensed and is not a locater, it must be installed | 195 | // if the partition is referenced and is not a locater, it must be installed |
196 | if (pItm->fReferencedForInstall && pItm->fHasComponent && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) | 196 | if (pItm->fReferencedForInstall && pItm->fHasComponent && !CpiWillBeInstalled(pItm->isInstalled, pItm->isAction)) |
197 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusPartitionDependency, "A partition is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); | 197 | MessageExitOnFailure(hr = E_FAIL, msierrComPlusPartitionDependency, "A partition is used by another entity being installed, but is not installed itself, key: %S", pItm->wzKey); |
198 | 198 | ||
@@ -281,7 +281,7 @@ HRESULT CpiPartitionsVerifyInstall( | |||
281 | { | 281 | { |
282 | case IDCANCEL: | 282 | case IDCANCEL: |
283 | case IDABORT: | 283 | case IDABORT: |
284 | ExitOnFailure(hr = E_FAIL, "A partition with a conflictiong name or id exists, key: %S", pItm->wzKey); | 284 | ExitOnFailure(hr = E_FAIL, "A partition with a conflicting name or id exists, key: %S", pItm->wzKey); |
285 | break; | 285 | break; |
286 | case IDRETRY: | 286 | case IDRETRY: |
287 | break; | 287 | break; |
@@ -403,7 +403,7 @@ HRESULT CpiPartitionsInstall( | |||
403 | int iActionType; | 403 | int iActionType; |
404 | 404 | ||
405 | // add action text | 405 | // add action text |
406 | hr = CpiAddActionTextToActionData(L"CreateComPlusPartitions", ppwzActionData); | 406 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"CreateComPlusPartitions"), ppwzActionData); |
407 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 407 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
408 | 408 | ||
409 | // add partition count to action data | 409 | // add partition count to action data |
@@ -455,7 +455,7 @@ HRESULT CpiPartitionsUninstall( | |||
455 | int iActionType; | 455 | int iActionType; |
456 | 456 | ||
457 | // add action text | 457 | // add action text |
458 | hr = CpiAddActionTextToActionData(L"RemoveComPlusPartitions", ppwzActionData); | 458 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"RemoveComPlusPartitions"), ppwzActionData); |
459 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 459 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
460 | 460 | ||
461 | // add partition count to action data | 461 | // add partition count to action data |
@@ -735,7 +735,7 @@ HRESULT CpiPartitionUsersInstall( | |||
735 | int iActionType; | 735 | int iActionType; |
736 | 736 | ||
737 | // add action text | 737 | // add action text |
738 | hr = CpiAddActionTextToActionData(L"AddComPlusPartitionUsers", ppwzActionData); | 738 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"AddComPlusPartitionUsers"), ppwzActionData); |
739 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 739 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
740 | 740 | ||
741 | // add partition count to action data | 741 | // add partition count to action data |
@@ -787,7 +787,7 @@ HRESULT CpiPartitionUsersUninstall( | |||
787 | int iActionType; | 787 | int iActionType; |
788 | 788 | ||
789 | // add action text | 789 | // add action text |
790 | hr = CpiAddActionTextToActionData(L"RemoveComPlusPartitionUsers", ppwzActionData); | 790 | hr = CpiAddActionTextToActionData(CUSTOM_ACTION_DECORATION(L"RemoveComPlusPartitionUsers"), ppwzActionData); |
791 | ExitOnFailure(hr, "Failed to add action text to custom action data"); | 791 | ExitOnFailure(hr, "Failed to add action text to custom action data"); |
792 | 792 | ||
793 | // add partition count to action data | 793 | // add partition count to action data |
diff --git a/src/ext/ComPlus/ca/cpsched.cpp b/src/ext/ComPlus/ca/cpsched.cpp index ebc547ae..acde3cd3 100644 --- a/src/ext/ComPlus/ca/cpsched.cpp +++ b/src/ext/ComPlus/ca/cpsched.cpp | |||
@@ -3,31 +3,17 @@ | |||
3 | #include "precomp.h" | 3 | #include "precomp.h" |
4 | 4 | ||
5 | 5 | ||
6 | #ifdef _WIN64 | 6 | #define CP_COMPLUSROLLBACKINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackInstallPrepare") |
7 | #define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare_64" | 7 | #define CP_COMPLUSINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusInstallPrepare") |
8 | #define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare_64" | 8 | #define CP_COMPLUSROLLBACKINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackInstallExecute") |
9 | #define CP_COMPLUSROLLBACKINSTALLEXECUTE L"ComPlusRollbackInstallExecute_64" | 9 | #define CP_COMPLUSINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusInstallExecute") |
10 | #define CP_COMPLUSINSTALLEXECUTE L"ComPlusInstallExecute_64" | 10 | #define CP_COMPLUSINSTALLEXECUTECOMMIT CUSTOM_ACTION_DECORATION(L"ComPlusInstallExecuteCommit") |
11 | #define CP_COMPLUSINSTALLEXECUTECOMMIT L"ComPlusInstallExecuteCommit_64" | 11 | #define CP_COMPLUSINSTALLCOMMIT CUSTOM_ACTION_DECORATION(L"ComPlusInstallCommit") |
12 | #define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit_64" | 12 | #define CP_COMPLUSROLLBACKINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackInstallPrepare") |
13 | #define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare_64" | 13 | #define CP_COMPLUSINSTALLPREPARE CUSTOM_ACTION_DECORATION(L"ComPlusInstallPrepare") |
14 | #define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare_64" | 14 | #define CP_COMPLUSROLLBACKUNINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusRollbackUninstallExecute") |
15 | #define CP_COMPLUSROLLBACKUNINSTALLEXECUTE L"ComPlusRollbackUninstallExecute_64" | 15 | #define CP_COMPLUSUNINSTALLEXECUTE CUSTOM_ACTION_DECORATION(L"ComPlusUninstallExecute") |
16 | #define CP_COMPLUSUNINSTALLEXECUTE L"ComPlusUninstallExecute_64" | 16 | #define CP_COMPLUSINSTALLCOMMIT CUSTOM_ACTION_DECORATION(L"ComPlusInstallCommit") |
17 | #define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit_64" | ||
18 | #else | ||
19 | #define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare" | ||
20 | #define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare" | ||
21 | #define CP_COMPLUSROLLBACKINSTALLEXECUTE L"ComPlusRollbackInstallExecute" | ||
22 | #define CP_COMPLUSINSTALLEXECUTE L"ComPlusInstallExecute" | ||
23 | #define CP_COMPLUSINSTALLEXECUTECOMMIT L"ComPlusInstallExecuteCommit" | ||
24 | #define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit" | ||
25 | #define CP_COMPLUSROLLBACKINSTALLPREPARE L"ComPlusRollbackInstallPrepare" | ||
26 | #define CP_COMPLUSINSTALLPREPARE L"ComPlusInstallPrepare" | ||
27 | #define CP_COMPLUSROLLBACKUNINSTALLEXECUTE L"ComPlusRollbackUninstallExecute" | ||
28 | #define CP_COMPLUSUNINSTALLEXECUTE L"ComPlusUninstallExecute" | ||
29 | #define CP_COMPLUSINSTALLCOMMIT L"ComPlusInstallCommit" | ||
30 | #endif | ||
31 | 17 | ||
32 | /******************************************************************** | 18 | /******************************************************************** |
33 | ConfigureComPlusInstall - CUSTOM ACTION ENTRY POINT for installing COM+ components | 19 | ConfigureComPlusInstall - CUSTOM ACTION ENTRY POINT for installing COM+ components |
@@ -81,7 +67,7 @@ extern "C" UINT __stdcall ConfigureComPlusInstall(MSIHANDLE hInstall) | |||
81 | 67 | ||
82 | CpiSchedInitialize(); | 68 | CpiSchedInitialize(); |
83 | 69 | ||
84 | // check for the prerequsite tables | 70 | // check for the prerequisite tables |
85 | if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) | 71 | if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) |
86 | { | 72 | { |
87 | WcaLog(LOGMSG_VERBOSE, "skipping install COM+ CustomAction, no ComPlusPartition, ComPlusApplication or ComPlusAssembly table present"); | 73 | WcaLog(LOGMSG_VERBOSE, "skipping install COM+ CustomAction, no ComPlusPartition, ComPlusApplication or ComPlusAssembly table present"); |
@@ -117,55 +103,55 @@ extern "C" UINT __stdcall ConfigureComPlusInstall(MSIHANDLE hInstall) | |||
117 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition)) | 103 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition)) |
118 | { | 104 | { |
119 | hr = CpiPartitionsRead(&partList); | 105 | hr = CpiPartitionsRead(&partList); |
120 | MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read ComPlusPartitions table"); | 106 | MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read Wix4ComPlusPartitions table"); |
121 | } | 107 | } |
122 | 108 | ||
123 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole)) | 109 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole)) |
124 | { | 110 | { |
125 | hr = CpiPartitionRolesRead(&partList, &partRoleList); | 111 | hr = CpiPartitionRolesRead(&partList, &partRoleList); |
126 | MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read ComPlusPartitionRole table"); | 112 | MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read Wix4ComPlusPartitionRole table"); |
127 | } | 113 | } |
128 | 114 | ||
129 | if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole))) | 115 | if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole))) |
130 | { | 116 | { |
131 | hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList); | 117 | hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList); |
132 | MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read ComPlusUserInPartitionRole table"); | 118 | MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read Wix4ComPlusUserInPartitionRole table"); |
133 | } | 119 | } |
134 | 120 | ||
135 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser)) | 121 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser)) |
136 | { | 122 | { |
137 | hr = CpiPartitionUsersRead(&partList, &partUsrList); | 123 | hr = CpiPartitionUsersRead(&partList, &partUsrList); |
138 | MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read ComPlusPartitionUser table"); | 124 | MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read Wix4ComPlusPartitionUser table"); |
139 | } | 125 | } |
140 | 126 | ||
141 | if (CpiTableExists(cptComPlusApplication)) | 127 | if (CpiTableExists(cptComPlusApplication)) |
142 | { | 128 | { |
143 | hr = CpiApplicationsRead(&partList, &appList); | 129 | hr = CpiApplicationsRead(&partList, &appList); |
144 | MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read ComPlusApplication table"); | 130 | MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read Wix4ComPlusApplication table"); |
145 | } | 131 | } |
146 | 132 | ||
147 | if (CpiTableExists(cptComPlusApplicationRole)) | 133 | if (CpiTableExists(cptComPlusApplicationRole)) |
148 | { | 134 | { |
149 | hr = CpiApplicationRolesRead(&appList, &appRoleList); | 135 | hr = CpiApplicationRolesRead(&appList, &appRoleList); |
150 | MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read ComPlusApplicationRole table"); | 136 | MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read Wix4ComPlusApplicationRole table"); |
151 | } | 137 | } |
152 | 138 | ||
153 | if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole)) | 139 | if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole)) |
154 | { | 140 | { |
155 | hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList); | 141 | hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList); |
156 | MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read ComPlusUserInApplicationRole table"); | 142 | MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read Wix4ComPlusUserInApplicationRole table"); |
157 | } | 143 | } |
158 | 144 | ||
159 | if (CpiTableExists(cptComPlusAssembly)) | 145 | if (CpiTableExists(cptComPlusAssembly)) |
160 | { | 146 | { |
161 | hr = CpiAssembliesRead(&appList, &appRoleList, &asmList); | 147 | hr = CpiAssembliesRead(&appList, &appRoleList, &asmList); |
162 | MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read ComPlusAssembly table"); | 148 | MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read Wix4ComPlusAssembly table"); |
163 | } | 149 | } |
164 | 150 | ||
165 | if (CpiTableExists(cptComPlusSubscription)) | 151 | if (CpiTableExists(cptComPlusSubscription)) |
166 | { | 152 | { |
167 | hr = CpiSubscriptionsRead(&asmList, &subList); | 153 | hr = CpiSubscriptionsRead(&asmList, &subList); |
168 | MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read ComPlusSubscription table"); | 154 | MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read Wix4ComPlusSubscription table"); |
169 | } | 155 | } |
170 | 156 | ||
171 | // verify elements | 157 | // verify elements |
@@ -295,7 +281,7 @@ LExit: | |||
295 | CpiAssemblyListFree(&asmList); | 281 | CpiAssemblyListFree(&asmList); |
296 | CpiSubscriptionListFree(&subList); | 282 | CpiSubscriptionListFree(&subList); |
297 | 283 | ||
298 | // unitialize | 284 | // uninitialize |
299 | CpiSchedFinalize(); | 285 | CpiSchedFinalize(); |
300 | 286 | ||
301 | if (fInitializedCom) | 287 | if (fInitializedCom) |
@@ -359,7 +345,7 @@ extern "C" UINT __stdcall ConfigureComPlusUninstall(MSIHANDLE hInstall) | |||
359 | // check for the prerequsite tables | 345 | // check for the prerequsite tables |
360 | if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) | 346 | if (!CpiTableExists(cptComPlusPartition) && !CpiTableExists(cptComPlusApplication) && !CpiTableExists(cptComPlusAssembly)) |
361 | { | 347 | { |
362 | WcaLog(LOGMSG_VERBOSE, "skipping uninstall COM+ CustomAction, no ComPlusPartition, ComPlusApplication or ComPlusAssembly table present"); | 348 | WcaLog(LOGMSG_VERBOSE, "skipping uninstall COM+ CustomAction, no Wix4ComPlusPartition, Wix4ComPlusApplication or Wix4ComPlusAssembly table present"); |
363 | ExitFunction1(hr = S_FALSE); | 349 | ExitFunction1(hr = S_FALSE); |
364 | } | 350 | } |
365 | 351 | ||
@@ -392,55 +378,55 @@ extern "C" UINT __stdcall ConfigureComPlusUninstall(MSIHANDLE hInstall) | |||
392 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition)) | 378 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartition)) |
393 | { | 379 | { |
394 | hr = CpiPartitionsRead(&partList); | 380 | hr = CpiPartitionsRead(&partList); |
395 | MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read ComPlusPartitions table"); | 381 | MessageExitOnFailure(hr, msierrComPlusPartitionReadFailed, "Failed to read Wix4ComPlusPartitions table"); |
396 | } | 382 | } |
397 | 383 | ||
398 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole)) | 384 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionRole)) |
399 | { | 385 | { |
400 | hr = CpiPartitionRolesRead(&partList, &partRoleList); | 386 | hr = CpiPartitionRolesRead(&partList, &partRoleList); |
401 | MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read ComPlusPartitionRole table"); | 387 | MessageExitOnFailure(hr, msierrComPlusPartitionRoleReadFailed, "Failed to read Wix4ComPlusPartitionRole table"); |
402 | } | 388 | } |
403 | 389 | ||
404 | if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole))) | 390 | if (502 <= iVersionNT && (CpiTableExists(cptComPlusUserInPartitionRole) || CpiTableExists(cptComPlusGroupInPartitionRole))) |
405 | { | 391 | { |
406 | hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList); | 392 | hr = CpiUsersInPartitionRolesRead(&partRoleList, &usrInPartRoleList); |
407 | MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read ComPlusUserInPartitionRole table"); | 393 | MessageExitOnFailure(hr, msierrComPlusUserInPartitionRoleReadFailed, "Failed to read Wix4ComPlusUserInPartitionRole table"); |
408 | } | 394 | } |
409 | 395 | ||
410 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser)) | 396 | if (502 <= iVersionNT && CpiTableExists(cptComPlusPartitionUser)) |
411 | { | 397 | { |
412 | hr = CpiPartitionUsersRead(&partList, &partUsrList); | 398 | hr = CpiPartitionUsersRead(&partList, &partUsrList); |
413 | MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read ComPlusPartitionUser table"); | 399 | MessageExitOnFailure(hr, msierrComPlusPartitionUserReadFailed, "Failed to read Wix4ComPlusPartitionUser table"); |
414 | } | 400 | } |
415 | 401 | ||
416 | if (CpiTableExists(cptComPlusApplication)) | 402 | if (CpiTableExists(cptComPlusApplication)) |
417 | { | 403 | { |
418 | hr = CpiApplicationsRead(&partList, &appList); | 404 | hr = CpiApplicationsRead(&partList, &appList); |
419 | MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read ComPlusApplication table"); | 405 | MessageExitOnFailure(hr, msierrComPlusApplicationReadFailed, "Failed to read Wix4ComPlusApplication table"); |
420 | } | 406 | } |
421 | 407 | ||
422 | if (CpiTableExists(cptComPlusApplicationRole)) | 408 | if (CpiTableExists(cptComPlusApplicationRole)) |
423 | { | 409 | { |
424 | hr = CpiApplicationRolesRead(&appList, &appRoleList); | 410 | hr = CpiApplicationRolesRead(&appList, &appRoleList); |
425 | MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read ComPlusApplicationRole table"); | 411 | MessageExitOnFailure(hr, msierrComPlusApplicationRoleReadFailed, "Failed to read Wix4ComPlusApplicationRole table"); |
426 | } | 412 | } |
427 | 413 | ||
428 | if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole)) | 414 | if (CpiTableExists(cptComPlusUserInApplicationRole) || CpiTableExists(cptComPlusGroupInApplicationRole)) |
429 | { | 415 | { |
430 | hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList); | 416 | hr = CpiUsersInApplicationRolesRead(&appRoleList, &usrInAppRoleList); |
431 | MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read ComPlusUserInApplicationRole table"); | 417 | MessageExitOnFailure(hr, msierrComPlusUserInApplicationRoleReadFailed, "Failed to read Wix4ComPlusUserInApplicationRole table"); |
432 | } | 418 | } |
433 | 419 | ||
434 | if (CpiTableExists(cptComPlusAssembly)) | 420 | if (CpiTableExists(cptComPlusAssembly)) |
435 | { | 421 | { |
436 | hr = CpiAssembliesRead(&appList, &appRoleList, &asmList); | 422 | hr = CpiAssembliesRead(&appList, &appRoleList, &asmList); |
437 | MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read ComPlusAssembly table"); | 423 | MessageExitOnFailure(hr, msierrComPlusAssembliesReadFailed, "Failed to read Wix4ComPlusAssembly table"); |
438 | } | 424 | } |
439 | 425 | ||
440 | if (CpiTableExists(cptComPlusSubscription)) | 426 | if (CpiTableExists(cptComPlusSubscription)) |
441 | { | 427 | { |
442 | hr = CpiSubscriptionsRead(&asmList, &subList); | 428 | hr = CpiSubscriptionsRead(&asmList, &subList); |
443 | MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read ComPlusSubscription table"); | 429 | MessageExitOnFailure(hr, msierrComPlusSubscriptionReadFailed, "Failed to read Wix4ComPlusSubscription table"); |
444 | } | 430 | } |
445 | 431 | ||
446 | // verify elements | 432 | // verify elements |
@@ -555,7 +541,7 @@ LExit: | |||
555 | CpiAssemblyListFree(&asmList); | 541 | CpiAssemblyListFree(&asmList); |
556 | CpiSubscriptionListFree(&subList); | 542 | CpiSubscriptionListFree(&subList); |
557 | 543 | ||
558 | // unitialize | 544 | // uninitialize |
559 | CpiSchedFinalize(); | 545 | CpiSchedFinalize(); |
560 | 546 | ||
561 | if (fInitializedCom) | 547 | if (fInitializedCom) |
diff --git a/src/ext/ComPlus/ca/cpsubsexec.cpp b/src/ext/ComPlus/ca/cpsubsexec.cpp index bbcf9853..ab32b856 100644 --- a/src/ext/ComPlus/ca/cpsubsexec.cpp +++ b/src/ext/ComPlus/ca/cpsubsexec.cpp | |||
@@ -54,7 +54,7 @@ HRESULT CpiConfigureSubscriptions( | |||
54 | hr = CpiActionStartMessage(ppwzData, FALSE); | 54 | hr = CpiActionStartMessage(ppwzData, FALSE); |
55 | ExitOnFailure(hr, "Failed to send action start message"); | 55 | ExitOnFailure(hr, "Failed to send action start message"); |
56 | 56 | ||
57 | // ger count | 57 | // get count |
58 | int iCnt = 0; | 58 | int iCnt = 0; |
59 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); | 59 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); |
60 | ExitOnFailure(hr, "Failed to read count"); | 60 | ExitOnFailure(hr, "Failed to read count"); |
@@ -127,7 +127,7 @@ HRESULT CpiRollbackConfigureSubscriptions( | |||
127 | hr = CpiActionStartMessage(ppwzData, NULL == pRollbackDataList); | 127 | hr = CpiActionStartMessage(ppwzData, NULL == pRollbackDataList); |
128 | ExitOnFailure(hr, "Failed to send action start message"); | 128 | ExitOnFailure(hr, "Failed to send action start message"); |
129 | 129 | ||
130 | // ger count | 130 | // get count |
131 | int iCnt = 0; | 131 | int iCnt = 0; |
132 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); | 132 | hr = WcaReadIntegerFromCaData(ppwzData, &iCnt); |
133 | ExitOnFailure(hr, "Failed to read count"); | 133 | ExitOnFailure(hr, "Failed to read count"); |
diff --git a/src/ext/ComPlus/ca/cputilsched.cpp b/src/ext/ComPlus/ca/cputilsched.cpp index 4a2fdfc6..760b5ec9 100644 --- a/src/ext/ComPlus/ca/cputilsched.cpp +++ b/src/ext/ComPlus/ca/cputilsched.cpp | |||
@@ -53,31 +53,31 @@ void CpiSchedInitialize() | |||
53 | // tables | 53 | // tables |
54 | giTables = 0; | 54 | giTables = 0; |
55 | 55 | ||
56 | if (S_OK == WcaTableExists(L"ComPlusPartition")) giTables |= cptComPlusPartition; | 56 | if (S_OK == WcaTableExists(L"Wix4ComPlusPartition")) giTables |= cptComPlusPartition; |
57 | if (S_OK == WcaTableExists(L"ComPlusPartitionProperty")) giTables |= cptComPlusPartitionProperty; | 57 | if (S_OK == WcaTableExists(L"Wix4ComPlusPartitionProperty")) giTables |= cptComPlusPartitionProperty; |
58 | if (S_OK == WcaTableExists(L"ComPlusPartitionRole")) giTables |= cptComPlusPartitionRole; | 58 | if (S_OK == WcaTableExists(L"Wix4ComPlusPartitionRole")) giTables |= cptComPlusPartitionRole; |
59 | if (S_OK == WcaTableExists(L"ComPlusUserInPartitionRole")) giTables |= cptComPlusUserInPartitionRole; | 59 | if (S_OK == WcaTableExists(L"Wix4ComPlusUserInPartitionRole")) giTables |= cptComPlusUserInPartitionRole; |
60 | if (S_OK == WcaTableExists(L"ComPlusGroupInPartitionRole")) giTables |= cptComPlusGroupInPartitionRole; | 60 | if (S_OK == WcaTableExists(L"Wix4ComPlusGroupInPartitionRole")) giTables |= cptComPlusGroupInPartitionRole; |
61 | if (S_OK == WcaTableExists(L"ComPlusPartitionUser")) giTables |= cptComPlusPartitionUser; | 61 | if (S_OK == WcaTableExists(L"Wix4ComPlusPartitionUser")) giTables |= cptComPlusPartitionUser; |
62 | if (S_OK == WcaTableExists(L"ComPlusApplication")) giTables |= cptComPlusApplication; | 62 | if (S_OK == WcaTableExists(L"Wix4ComPlusApplication")) giTables |= cptComPlusApplication; |
63 | if (S_OK == WcaTableExists(L"ComPlusApplicationProperty")) giTables |= cptComPlusApplicationProperty; | 63 | if (S_OK == WcaTableExists(L"Wix4ComPlusApplicationProperty")) giTables |= cptComPlusApplicationProperty; |
64 | if (S_OK == WcaTableExists(L"ComPlusApplicationRole")) giTables |= cptComPlusApplicationRole; | 64 | if (S_OK == WcaTableExists(L"Wix4ComPlusApplicationRole")) giTables |= cptComPlusApplicationRole; |
65 | if (S_OK == WcaTableExists(L"ComPlusApplicationRoleProperty")) giTables |= cptComPlusApplicationRoleProperty; | 65 | if (S_OK == WcaTableExists(L"Wix4ComPlusAppRoleProperty")) giTables |= cptComPlusApplicationRoleProperty; |
66 | if (S_OK == WcaTableExists(L"ComPlusUserInApplicationRole")) giTables |= cptComPlusUserInApplicationRole; | 66 | if (S_OK == WcaTableExists(L"Wix4ComPlusUserInAppRole")) giTables |= cptComPlusUserInApplicationRole; |
67 | if (S_OK == WcaTableExists(L"ComPlusGroupInApplicationRole")) giTables |= cptComPlusGroupInApplicationRole; | 67 | if (S_OK == WcaTableExists(L"Wix4ComPlusGroupInAppRole")) giTables |= cptComPlusGroupInApplicationRole; |
68 | if (S_OK == WcaTableExists(L"ComPlusAssembly")) giTables |= cptComPlusAssembly; | 68 | if (S_OK == WcaTableExists(L"Wix4ComPlusAssembly")) giTables |= cptComPlusAssembly; |
69 | if (S_OK == WcaTableExists(L"ComPlusAssemblyDependency")) giTables |= cptComPlusAssemblyDependency; | 69 | if (S_OK == WcaTableExists(L"Wix4ComPlusAssemblyDependency")) giTables |= cptComPlusAssemblyDependency; |
70 | if (S_OK == WcaTableExists(L"ComPlusComponent")) giTables |= cptComPlusComponent; | 70 | if (S_OK == WcaTableExists(L"Wix4ComPlusComponent")) giTables |= cptComPlusComponent; |
71 | if (S_OK == WcaTableExists(L"ComPlusComponentProperty")) giTables |= cptComPlusComponentProperty; | 71 | if (S_OK == WcaTableExists(L"Wix4ComPlusComponentProperty")) giTables |= cptComPlusComponentProperty; |
72 | if (S_OK == WcaTableExists(L"ComPlusRoleForComponent")) giTables |= cptComPlusRoleForComponent; | 72 | if (S_OK == WcaTableExists(L"Wix4ComPlusRoleForComponent")) giTables |= cptComPlusRoleForComponent; |
73 | if (S_OK == WcaTableExists(L"ComPlusInterface")) giTables |= cptComPlusInterface; | 73 | if (S_OK == WcaTableExists(L"Wix4ComPlusInterface")) giTables |= cptComPlusInterface; |
74 | if (S_OK == WcaTableExists(L"ComPlusInterfaceProperty")) giTables |= cptComPlusInterfaceProperty; | 74 | if (S_OK == WcaTableExists(L"Wix4ComPlusInterfaceProperty")) giTables |= cptComPlusInterfaceProperty; |
75 | if (S_OK == WcaTableExists(L"ComPlusRoleForInterface")) giTables |= cptComPlusRoleForInterface; | 75 | if (S_OK == WcaTableExists(L"Wix4ComPlusRoleForInterface")) giTables |= cptComPlusRoleForInterface; |
76 | if (S_OK == WcaTableExists(L"ComPlusMethod")) giTables |= cptComPlusMethod; | 76 | if (S_OK == WcaTableExists(L"Wix4ComPlusMethod")) giTables |= cptComPlusMethod; |
77 | if (S_OK == WcaTableExists(L"ComPlusMethodProperty")) giTables |= cptComPlusMethodProperty; | 77 | if (S_OK == WcaTableExists(L"Wix4ComPlusMethodProperty")) giTables |= cptComPlusMethodProperty; |
78 | if (S_OK == WcaTableExists(L"ComPlusRoleForMethod")) giTables |= cptComPlusRoleForMethod; | 78 | if (S_OK == WcaTableExists(L"Wix4ComPlusRoleForMethod")) giTables |= cptComPlusRoleForMethod; |
79 | if (S_OK == WcaTableExists(L"ComPlusSubscription")) giTables |= cptComPlusSubscription; | 79 | if (S_OK == WcaTableExists(L"Wix4ComPlusSubscription")) giTables |= cptComPlusSubscription; |
80 | if (S_OK == WcaTableExists(L"ComPlusSubscriptionProperty")) giTables |= cptComPlusSubscriptionProperty; | 80 | if (S_OK == WcaTableExists(L"Wix4ComPlusSubscriptionProperty")) giTables |= cptComPlusSubscriptionProperty; |
81 | } | 81 | } |
82 | 82 | ||
83 | void CpiSchedFinalize() | 83 | void CpiSchedFinalize() |
@@ -137,7 +137,7 @@ HRESULT CpiSchedGetCatalogCollection( | |||
137 | hr = CpiSchedGetAdminCatalog(&piCatalog); | 137 | hr = CpiSchedGetAdminCatalog(&piCatalog); |
138 | ExitOnFailure(hr, "Failed to get COM+ admin catalog"); | 138 | ExitOnFailure(hr, "Failed to get COM+ admin catalog"); |
139 | 139 | ||
140 | // get collecton from catalog | 140 | // get collection from catalog |
141 | hr = piCatalog->GetCollection(bstrName, &piDisp); | 141 | hr = piCatalog->GetCollection(bstrName, &piDisp); |
142 | ExitOnFailure(hr, "Failed to get collection"); | 142 | ExitOnFailure(hr, "Failed to get collection"); |
143 | 143 | ||
diff --git a/src/ext/ComPlus/ca/precomp.h b/src/ext/ComPlus/ca/precomp.h index 74c328d2..97aa8e97 100644 --- a/src/ext/ComPlus/ca/precomp.h +++ b/src/ext/ComPlus/ca/precomp.h | |||
@@ -31,3 +31,5 @@ | |||
31 | #include "cpapprolesched.h" | 31 | #include "cpapprolesched.h" |
32 | #include "cpasmsched.h" | 32 | #include "cpasmsched.h" |
33 | #include "cpsubssched.h" | 33 | #include "cpsubssched.h" |
34 | |||
35 | #include "..\..\caDecor.h" | ||
diff --git a/src/ext/ComPlus/wixext/ComPlusTableDefinitions.cs b/src/ext/ComPlus/wixext/ComPlusTableDefinitions.cs index 6af5045c..cffaff0d 100644 --- a/src/ext/ComPlus/wixext/ComPlusTableDefinitions.cs +++ b/src/ext/ComPlus/wixext/ComPlusTableDefinitions.cs | |||
@@ -123,7 +123,7 @@ namespace WixToolset.ComPlus | |||
123 | ); | 123 | ); |
124 | 124 | ||
125 | public static readonly TableDefinition ComPlusApplicationRoleProperty = new TableDefinition( | 125 | public static readonly TableDefinition ComPlusApplicationRoleProperty = new TableDefinition( |
126 | "Wix4ComPlusApplicationRoleProperty", | 126 | "Wix4ComPlusAppRoleProperty", |
127 | ComPlusSymbolDefinitions.ComPlusApplicationRoleProperty, | 127 | ComPlusSymbolDefinitions.ComPlusApplicationRoleProperty, |
128 | new[] | 128 | new[] |
129 | { | 129 | { |
@@ -135,7 +135,7 @@ namespace WixToolset.ComPlus | |||
135 | ); | 135 | ); |
136 | 136 | ||
137 | public static readonly TableDefinition ComPlusUserInApplicationRole = new TableDefinition( | 137 | public static readonly TableDefinition ComPlusUserInApplicationRole = new TableDefinition( |
138 | "Wix4ComPlusUserInApplicationRole", | 138 | "Wix4ComPlusUserInAppRole", |
139 | ComPlusSymbolDefinitions.ComPlusUserInApplicationRole, | 139 | ComPlusSymbolDefinitions.ComPlusUserInApplicationRole, |
140 | new[] | 140 | new[] |
141 | { | 141 | { |
@@ -148,7 +148,7 @@ namespace WixToolset.ComPlus | |||
148 | ); | 148 | ); |
149 | 149 | ||
150 | public static readonly TableDefinition ComPlusGroupInApplicationRole = new TableDefinition( | 150 | public static readonly TableDefinition ComPlusGroupInApplicationRole = new TableDefinition( |
151 | "Wix4ComPlusGroupInApplicationRole", | 151 | "Wix4ComPlusGroupInAppRole", |
152 | ComPlusSymbolDefinitions.ComPlusGroupInApplicationRole, | 152 | ComPlusSymbolDefinitions.ComPlusGroupInApplicationRole, |
153 | new[] | 153 | new[] |
154 | { | 154 | { |
diff --git a/src/internal/SetBuildNumber/Directory.Packages.props.pp b/src/internal/SetBuildNumber/Directory.Packages.props.pp index 552aab87..4085568f 100644 --- a/src/internal/SetBuildNumber/Directory.Packages.props.pp +++ b/src/internal/SetBuildNumber/Directory.Packages.props.pp | |||
@@ -33,6 +33,7 @@ | |||
33 | 33 | ||
34 | <PackageVersion Include="WixToolset.Bal.wixext" Version="{packageversion}" /> | 34 | <PackageVersion Include="WixToolset.Bal.wixext" Version="{packageversion}" /> |
35 | <PackageVersion Include="WixToolset.BootstrapperApplications.wixext" Version="{packageversion}" /> | 35 | <PackageVersion Include="WixToolset.BootstrapperApplications.wixext" Version="{packageversion}" /> |
36 | <PackageVersion Include="WixToolset.ComPlus.wixext" Version="{packageversion}" /> | ||
36 | <PackageVersion Include="WixToolset.Dependency.wixext" Version="{packageversion}" /> | 37 | <PackageVersion Include="WixToolset.Dependency.wixext" Version="{packageversion}" /> |
37 | <PackageVersion Include="WixToolset.NetFx.wixext" Version="{packageversion}" /> | 38 | <PackageVersion Include="WixToolset.NetFx.wixext" Version="{packageversion}" /> |
38 | <PackageVersion Include="WixToolset.UI.wixext" Version="{packageversion}" /> | 39 | <PackageVersion Include="WixToolset.UI.wixext" Version="{packageversion}" /> |
diff --git a/src/test/burn/WixTestTools/RuntimeFactAttribute.cs b/src/test/burn/WixTestTools/RuntimeFactAttribute.cs index f73c87a2..573a9de2 100644 --- a/src/test/burn/WixTestTools/RuntimeFactAttribute.cs +++ b/src/test/burn/WixTestTools/RuntimeFactAttribute.cs | |||
@@ -5,6 +5,7 @@ namespace WixTestTools | |||
5 | using System; | 5 | using System; |
6 | using System.Security.Principal; | 6 | using System.Security.Principal; |
7 | using WixInternal.TestSupport.XunitExtensions; | 7 | using WixInternal.TestSupport.XunitExtensions; |
8 | using System.Runtime.InteropServices; | ||
8 | 9 | ||
9 | public class RuntimeFactAttribute : SkippableFactAttribute | 10 | public class RuntimeFactAttribute : SkippableFactAttribute |
10 | { | 11 | { |
@@ -12,6 +13,16 @@ namespace WixTestTools | |||
12 | 13 | ||
13 | public static bool RuntimeTestsEnabled { get; } | 14 | public static bool RuntimeTestsEnabled { get; } |
14 | public static bool RunningAsAdministrator { get; } | 15 | public static bool RunningAsAdministrator { get; } |
16 | public static bool RunningOnWindowsServer { get; } | ||
17 | |||
18 | [DllImport("shlwapi.dll", SetLastError = true, EntryPoint = "#437")] | ||
19 | private static extern bool IsOS(int os); | ||
20 | private static bool IsWindowsServer() | ||
21 | { | ||
22 | const int OS_ANYSERVER = 29; | ||
23 | return IsOS(OS_ANYSERVER); | ||
24 | } | ||
25 | |||
15 | 26 | ||
16 | static RuntimeFactAttribute() | 27 | static RuntimeFactAttribute() |
17 | { | 28 | { |
@@ -21,6 +32,25 @@ namespace WixTestTools | |||
21 | 32 | ||
22 | var testsEnabledString = Environment.GetEnvironmentVariable(RequiredEnvironmentVariableName); | 33 | var testsEnabledString = Environment.GetEnvironmentVariable(RequiredEnvironmentVariableName); |
23 | RuntimeTestsEnabled = Boolean.TryParse(testsEnabledString, out var testsEnabled) && testsEnabled; | 34 | RuntimeTestsEnabled = Boolean.TryParse(testsEnabledString, out var testsEnabled) && testsEnabled; |
35 | |||
36 | RunningOnWindowsServer = IsWindowsServer(); | ||
37 | } | ||
38 | |||
39 | private bool _RequireWindowsServer; | ||
40 | public bool RequireWindowsServer | ||
41 | { | ||
42 | get | ||
43 | { | ||
44 | return _RequireWindowsServer; | ||
45 | } | ||
46 | set | ||
47 | { | ||
48 | _RequireWindowsServer = value; | ||
49 | if (_RequireWindowsServer && !RunningOnWindowsServer) | ||
50 | { | ||
51 | this.Skip = $"These tests are only run on Windows Server"; | ||
52 | } | ||
53 | } | ||
24 | } | 54 | } |
25 | 55 | ||
26 | public RuntimeFactAttribute() | 56 | public RuntimeFactAttribute() |
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET3.dll b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET3.dll new file mode 100644 index 00000000..b46be649 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET3.dll | |||
Binary files differ | |||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET3.tlb b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET3.tlb new file mode 100644 index 00000000..87419ee1 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET3.tlb | |||
Binary files differ | |||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET4.dll b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET4.dll new file mode 100644 index 00000000..e0fd3dee --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET4.dll | |||
Binary files differ | |||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET4.tlb b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET4.tlb new file mode 100644 index 00000000..63647bdc --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNET4.tlb | |||
Binary files differ | |||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNative.dll b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNative.dll new file mode 100644 index 00000000..dbcb5807 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/Components/TestComponentNative.dll | |||
Binary files differ | |||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/InstallUninstallNET3WithoutPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/InstallUninstallNET3WithoutPartitions.wixproj new file mode 100644 index 00000000..19382c83 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/InstallUninstallNET3WithoutPartitions.wixproj | |||
@@ -0,0 +1,15 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | <Project Sdk="WixToolset.Sdk"> | ||
4 | <PropertyGroup> | ||
5 | <UpgradeCode>{A3E0B539-63F9-4B43-9E34-F33AE1C6E06D}</UpgradeCode> | ||
6 | <ProductComponentsRef>true</ProductComponentsRef> | ||
7 | </PropertyGroup> | ||
8 | <ItemGroup> | ||
9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | ||
10 | </ItemGroup> | ||
11 | <ItemGroup> | ||
12 | <PackageReference Include="WixToolset.Util.wixext" /> | ||
13 | <PackageReference Include="WixToolset.ComPlus.wixext" /> | ||
14 | </ItemGroup> | ||
15 | </Project> | ||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/product.wxs b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/product.wxs new file mode 100644 index 00000000..129669cc --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET3WithoutPartitions/product.wxs | |||
@@ -0,0 +1,24 @@ | |||
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 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
5 | xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util" | ||
6 | xmlns:complus="http://wixtoolset.org/schemas/v4/wxs/complus"> | ||
7 | <Fragment> | ||
8 | <ComponentGroup Id="ProductComponents"> | ||
9 | <ComponentRef Id="Component1" /> | ||
10 | </ComponentGroup> | ||
11 | </Fragment> | ||
12 | |||
13 | <Fragment> | ||
14 | <Component Id="Component1" Guid="09624A9A-4BBC-4126-BBF9-0713C5217DB1" Directory="INSTALLFOLDER"> | ||
15 | <File Id="AssemblyFileNET" Source="../Components/TestComponentNET3.dll" KeyPath="yes" /> | ||
16 | <File Id="TlbFileNET" Source="../Components/TestComponentNET3.tlb" /> | ||
17 | <complus:ComPlusApplication Id="APPLICATION" Name="ComPlus .NET 3 Application" Description="ComPlus Application" > | ||
18 | <complus:ComPlusAssembly Id="ASSEMBLY_NET" Type=".net" DllPath="[#AssemblyFileNET]" TlbPath="[#TlbFileNET]" > | ||
19 | <complus:ComPlusComponent Id="MyComNET3" CLSID="17F82C39-5433-493A-A396-36072C645B80" /> | ||
20 | </complus:ComPlusAssembly> | ||
21 | </complus:ComPlusApplication> | ||
22 | </Component> | ||
23 | </Fragment> | ||
24 | </Wix> | ||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/InstallUninstallNET4WithoutPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/InstallUninstallNET4WithoutPartitions.wixproj new file mode 100644 index 00000000..19382c83 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/InstallUninstallNET4WithoutPartitions.wixproj | |||
@@ -0,0 +1,15 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | <Project Sdk="WixToolset.Sdk"> | ||
4 | <PropertyGroup> | ||
5 | <UpgradeCode>{A3E0B539-63F9-4B43-9E34-F33AE1C6E06D}</UpgradeCode> | ||
6 | <ProductComponentsRef>true</ProductComponentsRef> | ||
7 | </PropertyGroup> | ||
8 | <ItemGroup> | ||
9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | ||
10 | </ItemGroup> | ||
11 | <ItemGroup> | ||
12 | <PackageReference Include="WixToolset.Util.wixext" /> | ||
13 | <PackageReference Include="WixToolset.ComPlus.wixext" /> | ||
14 | </ItemGroup> | ||
15 | </Project> | ||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/product.wxs b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/product.wxs new file mode 100644 index 00000000..eabd7794 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNET4WithoutPartitions/product.wxs | |||
@@ -0,0 +1,24 @@ | |||
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 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
5 | xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util" | ||
6 | xmlns:complus="http://wixtoolset.org/schemas/v4/wxs/complus"> | ||
7 | <Fragment> | ||
8 | <ComponentGroup Id="ProductComponents"> | ||
9 | <ComponentRef Id="Component1" /> | ||
10 | </ComponentGroup> | ||
11 | </Fragment> | ||
12 | |||
13 | <Fragment> | ||
14 | <Component Id="Component1" Guid="09624A9A-4BBC-4126-BBF9-0713C5217DB1" Directory="INSTALLFOLDER"> | ||
15 | <File Id="AssemblyFileNET" Source="../Components/TestComponentNET4.dll" KeyPath="yes" /> | ||
16 | <File Id="TlbFileNET" Source="../Components/TestComponentNET4.tlb" /> | ||
17 | <complus:ComPlusApplication Id="APPLICATION" Name="ComPlus .NET 4 Application" Description="ComPlus Application" > | ||
18 | <complus:ComPlusAssembly Id="ASSEMBLY_NET" Type=".net" DllPath="[#AssemblyFileNET]" TlbPath="[#TlbFileNET]" > | ||
19 | <complus:ComPlusComponent Id="MyComNET4" CLSID="146AB3A2-4472-4DB9-94D5-311536E799BD" /> | ||
20 | </complus:ComPlusAssembly> | ||
21 | </complus:ComPlusApplication> | ||
22 | </Component> | ||
23 | </Fragment> | ||
24 | </Wix> | ||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/InstallUninstallNativeWithoutPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/InstallUninstallNativeWithoutPartitions.wixproj new file mode 100644 index 00000000..19382c83 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/InstallUninstallNativeWithoutPartitions.wixproj | |||
@@ -0,0 +1,15 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | <Project Sdk="WixToolset.Sdk"> | ||
4 | <PropertyGroup> | ||
5 | <UpgradeCode>{A3E0B539-63F9-4B43-9E34-F33AE1C6E06D}</UpgradeCode> | ||
6 | <ProductComponentsRef>true</ProductComponentsRef> | ||
7 | </PropertyGroup> | ||
8 | <ItemGroup> | ||
9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | ||
10 | </ItemGroup> | ||
11 | <ItemGroup> | ||
12 | <PackageReference Include="WixToolset.Util.wixext" /> | ||
13 | <PackageReference Include="WixToolset.ComPlus.wixext" /> | ||
14 | </ItemGroup> | ||
15 | </Project> | ||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/product.wxs b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/product.wxs new file mode 100644 index 00000000..ee3c4d8f --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallNativeWithoutPartitions/product.wxs | |||
@@ -0,0 +1,24 @@ | |||
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 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
5 | xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util" | ||
6 | xmlns:complus="http://wixtoolset.org/schemas/v4/wxs/complus"> | ||
7 | <Fragment> | ||
8 | <ComponentGroup Id="ProductComponents"> | ||
9 | <ComponentRef Id="Component1" /> | ||
10 | </ComponentGroup> | ||
11 | </Fragment> | ||
12 | |||
13 | <Fragment> | ||
14 | <Component Id="Component1" Guid="09624A9A-4BBC-4126-BBF9-0713C5217DB1" Directory="INSTALLFOLDER"> | ||
15 | <File Id="AssemblyFileNative" Source="../Components/TestComponentNative.dll" /> | ||
16 | |||
17 | <complus:ComPlusApplication Id="APPLICATION" Name="ComPlus Native Application" Description="ComPlus Native Application" > | ||
18 | <complus:ComPlusAssembly Id="ASSEMBLY_Native" Type="native" DllPath="[#AssemblyFileNative]" > | ||
19 | <complus:ComPlusComponent Id="MyComNative" CLSID="8b4c3a90-762c-465b-abc5-81cb3cc5e464" /> | ||
20 | </complus:ComPlusAssembly> | ||
21 | </complus:ComPlusApplication> | ||
22 | </Component> | ||
23 | </Fragment> | ||
24 | </Wix> | ||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/InstallUninstallWithPartitions.wixproj b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/InstallUninstallWithPartitions.wixproj new file mode 100644 index 00000000..19382c83 --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/InstallUninstallWithPartitions.wixproj | |||
@@ -0,0 +1,15 @@ | |||
1 | <?xml version="1.0" encoding="utf-8"?> | ||
2 | <!-- 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. --> | ||
3 | <Project Sdk="WixToolset.Sdk"> | ||
4 | <PropertyGroup> | ||
5 | <UpgradeCode>{A3E0B539-63F9-4B43-9E34-F33AE1C6E06D}</UpgradeCode> | ||
6 | <ProductComponentsRef>true</ProductComponentsRef> | ||
7 | </PropertyGroup> | ||
8 | <ItemGroup> | ||
9 | <Compile Include="..\..\Templates\Product.wxs" Link="Product.wxs" /> | ||
10 | </ItemGroup> | ||
11 | <ItemGroup> | ||
12 | <PackageReference Include="WixToolset.Util.wixext" /> | ||
13 | <PackageReference Include="WixToolset.ComPlus.wixext" /> | ||
14 | </ItemGroup> | ||
15 | </Project> | ||
diff --git a/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/product.wxs b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/product.wxs new file mode 100644 index 00000000..92dc892b --- /dev/null +++ b/src/test/msi/TestData/ComPlusExtensionTests/InstallUninstallWithPartitions/product.wxs | |||
@@ -0,0 +1,30 @@ | |||
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 | |||
4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
5 | xmlns:util="http://wixtoolset.org/schemas/v4/wxs/util" | ||
6 | xmlns:complus="http://wixtoolset.org/schemas/v4/wxs/complus"> | ||
7 | <Fragment> | ||
8 | <ComponentGroup Id="ProductComponents"> | ||
9 | <ComponentRef Id="Component1" /> | ||
10 | </ComponentGroup> | ||
11 | </Fragment> | ||
12 | |||
13 | <Fragment> | ||
14 | <util:User Id="TEST_USER" Name="[LogonUser]" /> | ||
15 | |||
16 | <Component Id="Component1" Guid="09624A9A-4BBC-4126-BBF9-0713C5217DB1" Directory="INSTALLFOLDER"> | ||
17 | <File Id="AssemblyFileNative" Source="../Components/TestComponentNative.dll" /> | ||
18 | |||
19 | <!-- Partition testing only works on Server OS --> | ||
20 | <complus:ComPlusPartition Id="PARTITION" Name="Complus Partition1" Description="ComPlus Partition" > | ||
21 | <complus:ComPlusPartitionUser Id="PARTITION_USER" User ="TEST_USER"/> | ||
22 | <complus:ComPlusApplication Id="APPLICATION" Name="ComPlus Application" Description="ComPlus Application" > | ||
23 | <complus:ComPlusAssembly Id="ASSEMBLY_Native" Type="native" DllPath="[#AssemblyFileNative]" > | ||
24 | <complus:ComPlusComponent Id="MyComNative" CLSID="8b4c3a90-762c-465b-abc5-81cb3cc5e464" /> | ||
25 | </complus:ComPlusAssembly> | ||
26 | </complus:ComPlusApplication> | ||
27 | </complus:ComPlusPartition> | ||
28 | </Component> | ||
29 | </Fragment> | ||
30 | </Wix> | ||
diff --git a/src/test/msi/WixToolsetTest.MsiE2E/ComPlusExtensionTests.cs b/src/test/msi/WixToolsetTest.MsiE2E/ComPlusExtensionTests.cs new file mode 100644 index 00000000..b143c19d --- /dev/null +++ b/src/test/msi/WixToolsetTest.MsiE2E/ComPlusExtensionTests.cs | |||
@@ -0,0 +1,50 @@ | |||
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 WixToolsetTest.MsiE2E | ||
4 | { | ||
5 | using System; | ||
6 | using WixTestTools; | ||
7 | using Xunit; | ||
8 | using Xunit.Abstractions; | ||
9 | |||
10 | public class ComPlusExtensionTests : MsiE2ETests | ||
11 | { | ||
12 | public ComPlusExtensionTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } | ||
13 | |||
14 | [RuntimeFact] | ||
15 | public void CanInstallUninstallNativeWithoutPartitions() | ||
16 | { | ||
17 | var product = this.CreatePackageInstaller("InstallUninstallNativeWithoutPartitions"); | ||
18 | product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
19 | |||
20 | product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
21 | } | ||
22 | |||
23 | [RuntimeFact] | ||
24 | public void CanInstallUninstallNET3WithoutPartitions() | ||
25 | { | ||
26 | var product = this.CreatePackageInstaller("InstallUninstallNET3WithoutPartitions"); | ||
27 | product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
28 | |||
29 | product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
30 | } | ||
31 | |||
32 | [RuntimeFact] | ||
33 | public void CanInstallUninstallNET4WithoutPartitions() | ||
34 | { | ||
35 | var product = this.CreatePackageInstaller("InstallUninstallNET4WithoutPartitions"); | ||
36 | product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
37 | |||
38 | product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
39 | } | ||
40 | |||
41 | [RuntimeFact(RequireWindowsServer = true)] | ||
42 | public void CanInstallAndUninstallWithPartitions() | ||
43 | { | ||
44 | var product = this.CreatePackageInstaller("InstallUninstallWithPartitions"); | ||
45 | product.InstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
46 | |||
47 | product.UninstallProduct(MSIExec.MSIExecReturnCode.SUCCESS); | ||
48 | } | ||
49 | } | ||
50 | } | ||