diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-04-22 16:57:18 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-04-23 15:40:21 -0500 |
| commit | 0ee63890d8eacd044115524476eb9419114500a7 (patch) | |
| tree | 63f7794f98a6438d29b8aae881c20c4de583a1a2 /src/burn/engine/registration.cpp | |
| parent | a981e29d7a3df566754356c3fe1eb938a5cac4c1 (diff) | |
| download | wix-0ee63890d8eacd044115524476eb9419114500a7.tar.gz wix-0ee63890d8eacd044115524476eb9419114500a7.tar.bz2 wix-0ee63890d8eacd044115524476eb9419114500a7.zip | |
Always reset the system component status when registering the bundle.
Finishes 4454
Diffstat (limited to 'src/burn/engine/registration.cpp')
| -rw-r--r-- | src/burn/engine/registration.cpp | 51 |
1 files changed, 14 insertions, 37 deletions
diff --git a/src/burn/engine/registration.cpp b/src/burn/engine/registration.cpp index 9953be83..e83e0811 100644 --- a/src/burn/engine/registration.cpp +++ b/src/burn/engine/registration.cpp | |||
| @@ -607,6 +607,7 @@ extern "C" HRESULT RegistrationSessionBegin( | |||
| 607 | HKEY hkRegistration = NULL; | 607 | HKEY hkRegistration = NULL; |
| 608 | BOOL fCreated = FALSE; | 608 | BOOL fCreated = FALSE; |
| 609 | LPWSTR sczPublisher = NULL; | 609 | LPWSTR sczPublisher = NULL; |
| 610 | DWORD er = ERROR_SUCCESS; | ||
| 610 | 611 | ||
| 611 | AssertSz(BOOTSTRAPPER_REGISTRATION_TYPE_NONE != registrationType, "Registration type can't be NONE"); | 612 | AssertSz(BOOTSTRAPPER_REGISTRATION_TYPE_NONE != registrationType, "Registration type can't be NONE"); |
| 612 | 613 | ||
| @@ -776,6 +777,15 @@ extern "C" HRESULT RegistrationSessionBegin( | |||
| 776 | hr = RegWriteNumber(hkRegistration, REGISTRY_BUNDLE_SYSTEM_COMPONENT, 1); | 777 | hr = RegWriteNumber(hkRegistration, REGISTRY_BUNDLE_SYSTEM_COMPONENT, 1); |
| 777 | ExitOnFailure(hr, "Failed to write %ls value.", REGISTRY_BUNDLE_SYSTEM_COMPONENT); | 778 | ExitOnFailure(hr, "Failed to write %ls value.", REGISTRY_BUNDLE_SYSTEM_COMPONENT); |
| 778 | } | 779 | } |
| 780 | else | ||
| 781 | { | ||
| 782 | er = ::RegDeleteValueW(hkRegistration, REGISTRY_BUNDLE_SYSTEM_COMPONENT); | ||
| 783 | if (ERROR_FILE_NOT_FOUND == er || ERROR_PATH_NOT_FOUND == er) | ||
| 784 | { | ||
| 785 | er = ERROR_SUCCESS; | ||
| 786 | } | ||
| 787 | ExitOnWin32Error(er, hr, "Failed to delete %ls value.", REGISTRY_BUNDLE_SYSTEM_COMPONENT); | ||
| 788 | } | ||
| 779 | 789 | ||
| 780 | // QuietUninstallString: [path to exe] /uninstall /quiet | 790 | // QuietUninstallString: [path to exe] /uninstall /quiet |
| 781 | hr = RegWriteStringFormatted(hkRegistration, REGISTRY_BUNDLE_QUIET_UNINSTALL_STRING, L"\"%ls\" /%ls /uninstall /quiet", pRegistration->sczCacheExecutablePath, BURN_COMMANDLINE_SWITCH_CLEAN_ROOM); | 791 | hr = RegWriteStringFormatted(hkRegistration, REGISTRY_BUNDLE_QUIET_UNINSTALL_STRING, L"\"%ls\" /%ls /uninstall /quiet", pRegistration->sczCacheExecutablePath, BURN_COMMANDLINE_SWITCH_CLEAN_ROOM); |
| @@ -829,40 +839,6 @@ LExit: | |||
| 829 | 839 | ||
| 830 | 840 | ||
| 831 | /******************************************************************* | 841 | /******************************************************************* |
| 832 | RegistrationSessionResume - Resumes a previous run session. | ||
| 833 | |||
| 834 | *******************************************************************/ | ||
| 835 | extern "C" HRESULT RegistrationSessionResume( | ||
| 836 | __in BURN_REGISTRATION* pRegistration, | ||
| 837 | __in BURN_VARIABLES* pVariables, | ||
| 838 | __in BOOTSTRAPPER_REGISTRATION_TYPE registrationType | ||
| 839 | ) | ||
| 840 | { | ||
| 841 | HRESULT hr = S_OK; | ||
| 842 | HKEY hkRegistration = NULL; | ||
| 843 | |||
| 844 | AssertSz(BOOTSTRAPPER_REGISTRATION_TYPE_NONE != registrationType, "Registration type can't be NONE"); | ||
| 845 | |||
| 846 | // open registration key | ||
| 847 | hr = RegOpen(pRegistration->hkRoot, pRegistration->sczRegistrationKey, KEY_WRITE, &hkRegistration); | ||
| 848 | ExitOnFailure(hr, "Failed to open registration key."); | ||
| 849 | |||
| 850 | // update resume mode | ||
| 851 | hr = UpdateResumeMode(pRegistration, hkRegistration, BURN_RESUME_MODE_ACTIVE, registrationType, FALSE); | ||
| 852 | ExitOnFailure(hr, "Failed to update resume mode."); | ||
| 853 | |||
| 854 | // update display name | ||
| 855 | hr = UpdateBundleNameRegistration(pRegistration, pVariables, hkRegistration, BOOTSTRAPPER_REGISTRATION_TYPE_INPROGRESS == registrationType); | ||
| 856 | ExitOnFailure(hr, "Failed to update name and publisher."); | ||
| 857 | |||
| 858 | LExit: | ||
| 859 | ReleaseRegKey(hkRegistration); | ||
| 860 | |||
| 861 | return hr; | ||
| 862 | } | ||
| 863 | |||
| 864 | |||
| 865 | /******************************************************************* | ||
| 866 | RegistrationSessionEnd - Unregisters a run session from the system. | 842 | RegistrationSessionEnd - Unregisters a run session from the system. |
| 867 | 843 | ||
| 868 | *******************************************************************/ | 844 | *******************************************************************/ |
| @@ -950,6 +926,7 @@ extern "C" HRESULT RegistrationSaveState( | |||
| 950 | LPWSTR sczValueName = NULL; | 926 | LPWSTR sczValueName = NULL; |
| 951 | DWORD dwType = 0; | 927 | DWORD dwType = 0; |
| 952 | DWORD dwNumberOfExistingValues = 0; | 928 | DWORD dwNumberOfExistingValues = 0; |
| 929 | DWORD er = ERROR_SUCCESS; | ||
| 953 | 930 | ||
| 954 | 931 | ||
| 955 | // write data to file | 932 | // write data to file |
| @@ -989,8 +966,8 @@ extern "C" HRESULT RegistrationSaveState( | |||
| 989 | 966 | ||
| 990 | ExitOnFailure(hr, "Failed to enumerate value %u", i); | 967 | ExitOnFailure(hr, "Failed to enumerate value %u", i); |
| 991 | 968 | ||
| 992 | hr = RegDeleteValue(hkRegistration, sczValueName); | 969 | er = ::RegDeleteValueW(hkRegistration, sczValueName); |
| 993 | ExitOnFailure(hr, "Failed to delete registration variable value."); | 970 | ExitOnWin32Error(er, hr, "Failed to delete registration variable value."); |
| 994 | } | 971 | } |
| 995 | 972 | ||
| 996 | // Write variables. | 973 | // Write variables. |
| @@ -1313,7 +1290,7 @@ static HRESULT UpdateResumeMode( | |||
| 1313 | } | 1290 | } |
| 1314 | else | 1291 | else |
| 1315 | { | 1292 | { |
| 1316 | ExitOnWin32Error(er, hr, "Failed to open run key."); | 1293 | ExitOnFailure(hr, "Failed to open run key."); |
| 1317 | 1294 | ||
| 1318 | er = ::RegDeleteValueW(hkRun, pRegistration->sczId); | 1295 | er = ::RegDeleteValueW(hkRun, pRegistration->sczId); |
| 1319 | if (ERROR_FILE_NOT_FOUND == er) | 1296 | if (ERROR_FILE_NOT_FOUND == er) |
