From a6b8ff9ddbf4ee03e570d9e3b7ec925b34cc0361 Mon Sep 17 00:00:00 2001 From: James Hawkins Date: Tue, 22 Aug 2006 18:56:00 -0700 Subject: [PATCH] msiexec: Add handling for msiexec's regserver option. --- programs/msiexec/msiexec.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/programs/msiexec/msiexec.c b/programs/msiexec/msiexec.c index d00fde9b6fe..d8025bfe205 100644 --- a/programs/msiexec/msiexec.c +++ b/programs/msiexec/msiexec.c @@ -329,6 +329,37 @@ static DWORD DoDllUnregisterServer(LPCWSTR DllName) return 0; } +static DWORD DoRegServer(void) +{ + SC_HANDLE scm, service; + CHAR path[MAX_PATH+12]; + + scm = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_CREATE_SERVICE); + if (!scm) + { + fprintf(stderr, "Failed to open the service control manager.\n"); + return 1; + } + + GetSystemDirectory(path, MAX_PATH); + lstrcatA(path, "\\msiexec.exe"); + + service = CreateServiceA(scm, "MSIServer", "MSIServer", GENERIC_ALL, + SERVICE_WIN32_SHARE_PROCESS, SERVICE_DEMAND_START, + SERVICE_ERROR_NORMAL, path, NULL, NULL, + NULL, NULL, NULL); + if (!service) + { + fprintf(stderr, "Failed to create MSI service\n"); + CloseServiceHandle(scm); + return 1; + } + + CloseServiceHandle(scm); + CloseServiceHandle(service); + return 0; +} + static BOOL process_args_from_reg( LPWSTR ident, int *pargc, WCHAR ***pargv ) { LONG r; @@ -808,7 +839,7 @@ int main(int argc, char **argv) } else if (FunctionRegServer) { - WINE_FIXME( "/regserver not implemented yet, ignoring\n" ); + ReturnCode = DoRegServer(); } else if (FunctionUnregServer) {