msiexec: Ignore failure to create the service if it already exists.
diff --git a/programs/msiexec/msiexec.c b/programs/msiexec/msiexec.c
index d8025bf..364d54a 100644
--- a/programs/msiexec/msiexec.c
+++ b/programs/msiexec/msiexec.c
@@ -333,6 +333,7 @@
{
SC_HANDLE scm, service;
CHAR path[MAX_PATH+12];
+ DWORD ret = 0;
scm = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CREATE_SERVICE);
if (!scm)
@@ -348,16 +349,15 @@
SERVICE_WIN32_SHARE_PROCESS, SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL, path, NULL, NULL,
NULL, NULL, NULL);
- if (!service)
+
+ if (service) CloseServiceHandle(service);
+ else if (GetLastError() != ERROR_SERVICE_EXISTS)
{
fprintf(stderr, "Failed to create MSI service\n");
- CloseServiceHandle(scm);
- return 1;
+ ret = 1;
}
-
- CloseServiceHandle(scm);
- CloseServiceHandle(service);
- return 0;
+ CloseServiceHandle(scm);
+ return ret;
}
static BOOL process_args_from_reg( LPWSTR ident, int *pargc, WCHAR ***pargv )