James Hawkins : msiexec: Add handling for msiexec's regserver option.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Aug 23 05:55:43 CDT 2006
Module: wine
Branch: master
Commit: a6b8ff9ddbf4ee03e570d9e3b7ec925b34cc0361
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=a6b8ff9ddbf4ee03e570d9e3b7ec925b34cc0361
Author: James Hawkins <truiken at gmail.com>
Date: Tue Aug 22 18:56:00 2006 -0700
msiexec: Add handling for msiexec's regserver option.
---
programs/msiexec/msiexec.c | 33 ++++++++++++++++++++++++++++++++-
1 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/programs/msiexec/msiexec.c b/programs/msiexec/msiexec.c
index d00fde9..d8025bf 100644
--- a/programs/msiexec/msiexec.c
+++ b/programs/msiexec/msiexec.c
@@ -329,6 +329,37 @@ static DWORD DoDllUnregisterServer(LPCWS
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)
{
More information about the wine-cvs
mailing list