Commit 129161fe authored by Hans Leidekker's avatar Hans Leidekker Committed by Alexandre Julliard

msi: Update the UI in the StartServices and StopServices actions.

parent a9cd43db
...@@ -5153,10 +5153,11 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param) ...@@ -5153,10 +5153,11 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param)
{ {
MSIPACKAGE *package = param; MSIPACKAGE *package = param;
MSICOMPONENT *comp; MSICOMPONENT *comp;
MSIRECORD *uirow;
SC_HANDLE scm = NULL, service = NULL; SC_HANDLE scm = NULL, service = NULL;
LPCWSTR component, *vector = NULL; LPCWSTR component, *vector = NULL;
LPWSTR name, args; LPWSTR name, args, display_name = NULL;
DWORD event, numargs; DWORD event, numargs, len;
UINT r = ERROR_FUNCTION_FAILED; UINT r = ERROR_FUNCTION_FAILED;
component = MSI_RecordGetString(rec, 6); component = MSI_RecordGetString(rec, 6);
...@@ -5189,6 +5190,14 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param) ...@@ -5189,6 +5190,14 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param)
goto done; goto done;
} }
len = 0;
if (!GetServiceDisplayNameW( scm, name, NULL, &len ) &&
GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if ((display_name = msi_alloc( ++len * sizeof(WCHAR ))))
GetServiceDisplayNameW( scm, name, display_name, &len );
}
service = OpenServiceW(scm, name, SERVICE_START); service = OpenServiceW(scm, name, SERVICE_START);
if (!service) if (!service)
{ {
...@@ -5208,12 +5217,19 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param) ...@@ -5208,12 +5217,19 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param)
r = ERROR_SUCCESS; r = ERROR_SUCCESS;
done: done:
uirow = MSI_CreateRecord( 2 );
MSI_RecordSetStringW( uirow, 1, display_name );
MSI_RecordSetStringW( uirow, 2, name );
ui_actiondata( package, szStartServices, uirow );
msiobj_release( &uirow->hdr );
CloseServiceHandle(service); CloseServiceHandle(service);
CloseServiceHandle(scm); CloseServiceHandle(scm);
msi_free(name); msi_free(name);
msi_free(args); msi_free(args);
msi_free(vector); msi_free(vector);
msi_free(display_name);
return r; return r;
} }
...@@ -5326,9 +5342,11 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param ) ...@@ -5326,9 +5342,11 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param )
{ {
MSIPACKAGE *package = param; MSIPACKAGE *package = param;
MSICOMPONENT *comp; MSICOMPONENT *comp;
MSIRECORD *uirow;
LPCWSTR component; LPCWSTR component;
LPWSTR name; LPWSTR name = NULL, display_name = NULL;
DWORD event; DWORD event, len;
SC_HANDLE scm;
event = MSI_RecordGetInteger( rec, 3 ); event = MSI_RecordGetInteger( rec, 3 );
if (!(event & msidbServiceControlEventStop)) if (!(event & msidbServiceControlEventStop))
...@@ -5347,10 +5365,34 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param ) ...@@ -5347,10 +5365,34 @@ static UINT ITERATE_StopService( MSIRECORD *rec, LPVOID param )
} }
comp->Action = INSTALLSTATE_ABSENT; comp->Action = INSTALLSTATE_ABSENT;
scm = OpenSCManagerW( NULL, NULL, SC_MANAGER_CONNECT );
if (!scm)
{
ERR("Failed to open the service control manager\n");
goto done;
}
len = 0;
if (!GetServiceDisplayNameW( scm, name, NULL, &len ) &&
GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if ((display_name = msi_alloc( ++len * sizeof(WCHAR ))))
GetServiceDisplayNameW( scm, name, display_name, &len );
}
CloseServiceHandle( scm );
deformat_string( package, MSI_RecordGetString( rec, 2 ), &name ); deformat_string( package, MSI_RecordGetString( rec, 2 ), &name );
stop_service( name ); stop_service( name );
msi_free( name );
done:
uirow = MSI_CreateRecord( 2 );
MSI_RecordSetStringW( uirow, 1, display_name );
MSI_RecordSetStringW( uirow, 2, name );
ui_actiondata( package, szStopServices, uirow );
msiobj_release( &uirow->hdr );
msi_free( name );
msi_free( display_name );
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment