[1/2] msiexec: Add /unregserver support.

Hans Leidekker hans at codeweavers.com
Tue Feb 12 07:32:45 CST 2013


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

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)
 	{
-- 
1.7.10.4







More information about the wine-patches mailing list