Commit ddc1baa4 authored by Andreas Maier's avatar Andreas Maier Committed by Alexandre Julliard

msi: Use special error control flag in CreateService.

parent be5b2706
......@@ -5811,6 +5811,7 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
LPWSTR name = NULL, disp = NULL, load_order = NULL, serv_name = NULL;
LPWSTR depends = NULL, pass = NULL, args = NULL, image_path = NULL;
DWORD serv_type, start_type, err_control;
BOOL is_vital;
SERVICE_DESCRIPTIONW sd = {NULL};
UINT ret = ERROR_SUCCESS;
......@@ -5849,6 +5850,13 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
deformat_string(package, MSI_RecordGetString(rec, 11), &args);
deformat_string(package, MSI_RecordGetString(rec, 13), &sd.lpDescription);
/* Should the complete install fail if CreateService fails? */
is_vital = (err_control & msidbServiceInstallErrorControlVital);
/* Remove the msidbServiceInstallErrorControlVital-flag from err_control.
CreateService (under Windows) would fail if not. */
err_control &= ~msidbServiceInstallErrorControlVital;
/* fetch the service path */
row = MSI_QueryGetRecord(package->db, query, comp);
if (!row)
......@@ -5890,7 +5898,12 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param)
if (!service)
{
if (GetLastError() != ERROR_SERVICE_EXISTS)
ERR("Failed to create service %s: %d\n", debugstr_w(name), GetLastError());
{
WARN("Failed to create service %s: %d\n", debugstr_w(name), GetLastError());
if (is_vital)
ret = ERROR_INSTALL_FAILURE;
}
}
else if (sd.lpDescription)
{
......
......@@ -200,6 +200,11 @@ enum msidbServiceControlEvent
msidbServiceControlEventUninstallDelete = 0x00000080,
};
enum msidbServiceInstallErrorControl
{
msidbServiceInstallErrorControlVital = 0x00008000
};
enum msidbMoveFileOptions
{
msidbMoveFileOptionsMove = 0x00000001,
......
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