Hans Leidekker : msiexec: Add /unregserver support.

Alexandre Julliard julliard at winehq.org
Tue Feb 12 13:58:12 CST 2013


Module: wine
Branch: master
Commit: 6cd2ffae0220fe0d16d48d4534d623e9d951f71a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6cd2ffae0220fe0d16d48d4534d623e9d951f71a

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Feb 12 14:32:45 2013 +0100

msiexec: Add /unregserver support.

---

 programs/msiexec/msiexec.c |   31 ++++++++++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/programs/msiexec/msiexec.c b/programs/msiexec/msiexec.c
index 9b378c6..13a55c2 100644
--- a/programs/msiexec/msiexec.c
+++ b/programs/msiexec/msiexec.c
@@ -373,6 +373,35 @@ static DWORD DoRegServer(void)
     return ret;
 }
 
+static DWORD DoUnregServer(void)
+{
+    static const WCHAR msiserverW[] = {'M','S','I','S','e','r','v','e','r',0};
+    SC_HANDLE scm, service;
+    DWORD ret = 0;
+
+    if (!(scm = OpenSCManagerW(NULL, SERVICES_ACTIVE_DATABASEW, SC_MANAGER_CONNECT)))
+    {
+        fprintf(stderr, "Failed to open service control manager\n");
+        return 1;
+    }
+    if ((service = OpenServiceW(scm, msiserverW, DELETE)))
+    {
+        if (!DeleteService(service))
+        {
+            fprintf(stderr, "Failed to delete MSI service\n");
+            ret = 1;
+        }
+        CloseServiceHandle(service);
+    }
+    else if (GetLastError() != ERROR_SERVICE_DOES_NOT_EXIST)
+    {
+        fprintf(stderr, "Failed to open MSI service\n");
+        ret = 1;
+    }
+    CloseServiceHandle(scm);
+    return ret;
+}
+
 static INT DoEmbedding( LPWSTR key )
 {
 	printf("Remote custom actions are not supported yet\n");
@@ -982,7 +1011,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
 	}
 	else if (FunctionUnregServer)
 	{
-		WINE_FIXME( "/unregserver not implemented yet, ignoring\n" );
+		ReturnCode = DoUnregServer();
 	}
 	else if (FunctionServer)
 	{




More information about the wine-cvs mailing list