Skip to content

Commit

Permalink
[WINESYNC] msi: Implement deferral for standard and custom actions.
Browse files Browse the repository at this point in the history
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>

wine commit id 2a9e0f1fada4a414cc750f6d45595342f473e02f by Zebediah Figura <z.figura12@gmail.com>
  • Loading branch information
winesync authored and learn-more committed Mar 20, 2022
1 parent 426052d commit fd8b07b
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 73 deletions.
89 changes: 86 additions & 3 deletions dll/win32/msi/action.c
Expand Up @@ -105,8 +105,6 @@ static const WCHAR szIsolateComponents[] =
{'I','s','o','l','a','t','e','C','o','m','p','o','n','e','n','t','s',0};
static const WCHAR szMigrateFeatureStates[] =
{'M','i','g','r','a','t','e','F','e','a','t','u','r','e','S','t','a','t','e','s',0};
static const WCHAR szMsiUnpublishAssemblies[] =
{'M','s','i','U','n','p','u','b','l','i','s','h','A','s','s','e','m','b','l','i','e','s',0};
static const WCHAR szInstallODBC[] =
{'I','n','s','t','a','l','l','O','D','B','C',0};
static const WCHAR szInstallServices[] =
Expand Down Expand Up @@ -865,6 +863,9 @@ static UINT ACTION_CreateFolders(MSIPACKAGE *package)
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szCreateFolders);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -944,6 +945,9 @@ static UINT ACTION_RemoveFolders( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveFolders);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -3018,6 +3022,9 @@ static UINT ACTION_WriteRegistryValues(MSIPACKAGE *package)
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szWriteRegistryValues);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -3252,6 +3259,9 @@ static UINT ACTION_RemoveRegistryValues( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveRegistryValues);

rc = MSI_DatabaseOpenViewW( package->db, registry_query, &view );
if (rc == ERROR_SUCCESS)
{
Expand Down Expand Up @@ -3570,9 +3580,13 @@ static UINT ACTION_ProcessComponents(MSIPACKAGE *package)

TRACE("\n");

squash_guid( package->ProductCode, squashed_pc );
msi_set_sourcedir_props(package, FALSE);

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szProcessComponents);

squash_guid( package->ProductCode, squashed_pc );

LIST_FOR_EACH_ENTRY( comp, &package->components, MSICOMPONENT, entry )
{
MSIRECORD *uirow;
Expand Down Expand Up @@ -3846,6 +3860,9 @@ static UINT ACTION_RegisterTypeLibraries(MSIPACKAGE *package)
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterTypeLibraries);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -3907,6 +3924,9 @@ static UINT ACTION_UnregisterTypeLibraries( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szUnregisterTypeLibraries);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -4091,6 +4111,9 @@ static UINT ACTION_CreateShortcuts(MSIPACKAGE *package)
HRESULT res;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szCreateShortcuts);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -4144,6 +4167,9 @@ static UINT ACTION_RemoveShortcuts( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveShortcuts);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -4498,6 +4524,9 @@ static UINT ACTION_PublishProduct(MSIPACKAGE *package)
MSIRECORD *uirow;
BOOL republish = FALSE;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szPublishProduct);

if (!list_empty(&package->patches))
{
rc = msi_publish_patches(package);
Expand Down Expand Up @@ -4695,6 +4724,9 @@ static UINT ACTION_WriteIniValues(MSIPACKAGE *package)
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szWriteIniValues);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -4838,6 +4870,9 @@ static UINT ACTION_RemoveIniValues( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveIniValues);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc == ERROR_SUCCESS)
{
Expand Down Expand Up @@ -4930,6 +4965,9 @@ static UINT ACTION_SelfRegModules(MSIPACKAGE *package)
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szSelfRegModules);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -4980,6 +5018,9 @@ static UINT ACTION_SelfUnregModules( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szSelfUnregModules);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand All @@ -4995,6 +5036,9 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package)
UINT rc;
HKEY hkey = NULL, userdata = NULL;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szPublishFeatures);

if (!msi_check_publish(package))
return ERROR_SUCCESS;

Expand Down Expand Up @@ -5135,6 +5179,9 @@ static UINT ACTION_UnpublishFeatures(MSIPACKAGE *package)
{
MSIFEATURE *feature;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szUnpublishFeatures);

if (!msi_check_unpublish(package))
return ERROR_SUCCESS;

Expand Down Expand Up @@ -5287,6 +5334,9 @@ static UINT ACTION_RegisterProduct(MSIPACKAGE *package)
HKEY hkey, props, upgrade_key;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterProduct);

/* FIXME: also need to publish if the product is in advertise mode */
if (!msi_get_property_int( package->db, szProductToBeRegistered, 0 )
&& !msi_check_publish(package))
Expand Down Expand Up @@ -5605,6 +5655,9 @@ static UINT ACTION_RegisterUser(MSIPACKAGE *package)
{0},
};

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterUser);

if (msi_check_unpublish(package))
{
MSIREG_DeleteUserDataProductKey(package->ProductCode, package->Context);
Expand Down Expand Up @@ -5927,6 +5980,9 @@ static UINT ACTION_PublishComponents(MSIPACKAGE *package)
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szPublishComponents);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -5999,6 +6055,9 @@ static UINT ACTION_UnpublishComponents( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szUnpublishComponents);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -6147,6 +6206,9 @@ static UINT ACTION_InstallServices( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szInstallServices);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -6318,6 +6380,9 @@ static UINT ACTION_StartServices( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szStartServices);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -6481,6 +6546,9 @@ static UINT ACTION_StopServices( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szStopServices);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -6564,6 +6632,9 @@ static UINT ACTION_DeleteServices( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szDeleteServices);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -6834,6 +6905,9 @@ static UINT ACTION_InstallODBC( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szInstallODBC);

rc = MSI_DatabaseOpenViewW(package->db, driver_query, &view);
if (rc == ERROR_SUCCESS)
{
Expand Down Expand Up @@ -7012,6 +7086,9 @@ static UINT ACTION_RemoveODBC( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveODBC);

rc = MSI_DatabaseOpenViewW( package->db, driver_query, &view );
if (rc == ERROR_SUCCESS)
{
Expand Down Expand Up @@ -7358,6 +7435,9 @@ static UINT ACTION_WriteEnvironmentStrings( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szWriteEnvironmentStrings);

rc = MSI_DatabaseOpenViewW(package->db, query, &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down Expand Up @@ -7500,6 +7580,9 @@ static UINT ACTION_RemoveEnvironmentStrings( MSIPACKAGE *package )
MSIQUERY *view;
UINT rc;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveEnvironmentStrings);

rc = MSI_DatabaseOpenViewW( package->db, query, &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
Expand Down
6 changes: 6 additions & 0 deletions dll/win32/msi/assembly.c
Expand Up @@ -652,6 +652,9 @@ UINT ACTION_MsiPublishAssemblies( MSIPACKAGE *package )
{
MSICOMPONENT *comp;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szMsiPublishAssemblies);

LIST_FOR_EACH_ENTRY(comp, &package->components, MSICOMPONENT, entry)
{
LONG res;
Expand Down Expand Up @@ -717,6 +720,9 @@ UINT ACTION_MsiUnpublishAssemblies( MSIPACKAGE *package )
{
MSICOMPONENT *comp;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szMsiUnpublishAssemblies);

LIST_FOR_EACH_ENTRY(comp, &package->components, MSICOMPONENT, entry)
{
LONG res;
Expand Down
24 changes: 24 additions & 0 deletions dll/win32/msi/classes.c
Expand Up @@ -753,6 +753,9 @@ UINT ACTION_RegisterClassInfo(MSIPACKAGE *package)
MSICLASS *cls;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterClassInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down Expand Up @@ -918,6 +921,9 @@ UINT ACTION_UnregisterClassInfo( MSIPACKAGE *package )
HKEY hkey, hkey2;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szUnregisterClassInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down Expand Up @@ -1083,6 +1089,9 @@ UINT ACTION_RegisterProgIdInfo(MSIPACKAGE *package)
MSIRECORD *uirow;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterProgIdInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down Expand Up @@ -1143,6 +1152,9 @@ UINT ACTION_UnregisterProgIdInfo( MSIPACKAGE *package )
LONG res;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szUnregisterProgIdInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down Expand Up @@ -1255,6 +1267,9 @@ UINT ACTION_RegisterExtensionInfo(MSIPACKAGE *package)
LONG res;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterExtensionInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down Expand Up @@ -1363,6 +1378,9 @@ UINT ACTION_UnregisterExtensionInfo( MSIPACKAGE *package )
LONG res;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szUnregisterExtensionInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down Expand Up @@ -1446,6 +1464,9 @@ UINT ACTION_RegisterMIMEInfo(MSIPACKAGE *package)
MSIMIME *mt;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterMIMEInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down Expand Up @@ -1500,6 +1521,9 @@ UINT ACTION_UnregisterMIMEInfo( MSIPACKAGE *package )
MSIMIME *mime;
UINT r;

if (package->script == SCRIPT_NONE)
return msi_schedule_action(package, SCRIPT_INSTALL, szUnregisterMIMEInfo);

r = load_classes_and_such( package );
if (r != ERROR_SUCCESS)
return r;
Expand Down

0 comments on commit fd8b07b

Please sign in to comment.