From 50e18fe02468daf94a6d5f851f60543dbf015737 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 23 Jun 2004 09:12:07 +0000 Subject: [PATCH] wix-msi-loopback-20040622 convert wix installer to use msi interface to loopback dll instead of instloop.exe --- src/WINNT/install/loopback/NTMakefile | 3 +- src/WINNT/install/loopback/loopbackutils.cpp | 33 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/WINNT/install/loopback/NTMakefile b/src/WINNT/install/loopback/NTMakefile index 587052144..2747726e2 100644 --- a/src/WINNT/install/loopback/NTMakefile +++ b/src/WINNT/install/loopback/NTMakefile @@ -16,7 +16,8 @@ DLLEXPORTS=\ -EXPORT:InstallLoopBack \ -EXPORT:doLoopBackEntryW \ -EXPORT:uninstallLoopBackEntryW \ - -EXPORT:installLoopbackMSI + -EXPORT:installLoopbackMSI \ + -EXPORT:uninstallLoopbackMSI DLLLIBFILES=\ setupapi.lib msi.lib uuid.lib Shell32.lib ole32.lib advapi32.lib wbemuuid.lib diff --git a/src/WINNT/install/loopback/loopbackutils.cpp b/src/WINNT/install/loopback/loopbackutils.cpp index e460af3a0..d6eeafd7e 100644 --- a/src/WINNT/install/loopback/loopbackutils.cpp +++ b/src/WINNT/install/loopback/loopbackutils.cpp @@ -627,3 +627,36 @@ UINT __stdcall installLoopbackMSI (MSIHANDLE hInstall) return ERROR_SUCCESS; } +UINT __stdcall uninstallLoopbackMSI (MSIHANDLE hInstall) +{ + LPWSTR szValueBuf; + DWORD cbValueBuf = 256; + Args args; + UINT rc; + + szValueBuf = (LPWSTR) malloc (cbValueBuf * sizeof (WCHAR)); + while (rc = MsiGetPropertyW(hInstall, L"CustomActionData", szValueBuf, &cbValueBuf)) { + free (szValueBuf); + if (rc == ERROR_MORE_DATA) { + cbValueBuf++; + szValueBuf = (LPWSTR) malloc (cbValueBuf * sizeof (WCHAR)); + } + else + return ERROR_INSTALL_FAILURE; + } + + if (!process_args(szValueBuf, args)) + return ERROR_INSTALL_FAILURE; + + rc = UnInstallLoopBack (); + + if (rc == 1) + return ERROR_INSTALL_FAILURE; + + if (rc == 2) { + MsiDoActionW (hInstall, L"ScheduleReboot"); + } + + return ERROR_SUCCESS; +} + -- 2.39.5