On Wed, 2014-02-19 at 14:49 +0900, Aric Stewart wrote:
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 07322fe..a004225 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -5794,27 +5794,30 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param) goto done; } key = MSI_RecordGetString(row, 6);
- file = msi_get_loaded_file(package, key);
- msiobj_release(&row->hdr);
- if (!file)
- {
ERR("Failed to load the service file\n");
goto done;
- }
- if (!args || !args[0]) image_path = file->TargetPath;
- else
- if (key) {
int len = strlenW(file->TargetPath) + strlenW(args) + 2;
if (!(image_path = msi_alloc(len * sizeof(WCHAR))))
file = msi_get_loaded_file(package, key);
msiobj_release(&row->hdr);
if (!file) {
ret = ERROR_OUTOFMEMORY;
ERR("Failed to load the service file\n"); goto done; }
strcpyW(image_path, file->TargetPath);
strcatW(image_path, szSpace);
strcatW(image_path, args);
if (!args || !args[0]) image_path = file->TargetPath;
else
{
int len = strlenW(file->TargetPath) + strlenW(args) + 2;
if (!(image_path = msi_alloc(len * sizeof(WCHAR))))
{
ret = ERROR_OUTOFMEMORY;
goto done;
}
strcpyW(image_path, file->TargetPath);
strcatW(image_path, szSpace);
strcatW(image_path, args);
} service = CreateServiceW(hscm, name, disp, GENERIC_ALL, serv_type, start_type, err_control, image_path, load_order,}
@@ -5831,7 +5834,7 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param) WARN("failed to set service description %u\n", GetLastError()); }
- if (image_path != file->TargetPath) msi_free(image_path);
- if (image_path && image_path != file->TargetPath) msi_free(image_path);
done: CloseServiceHandle(service); CloseServiceHandle(hscm);
Should we still create the service if the installer doesn't specify the image path?