From f7020c0d16baf2b960e7123e233e20c519f6a340 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 15 Dec 2018 21:46:30 -0600 Subject: Import implementation of UtilCA from old repo's WixCA/scasched/scaexec. (#3) --- src/ca/scasched.cpp | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/ca/scasched.cpp (limited to 'src/ca/scasched.cpp') diff --git a/src/ca/scasched.cpp b/src/ca/scasched.cpp new file mode 100644 index 00000000..ba230a9e --- /dev/null +++ b/src/ca/scasched.cpp @@ -0,0 +1,127 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +#include "precomp.h" + + +/******************************************************************** +ConfigureSmb - CUSTOM ACTION ENTRY POINT for installing fileshare settings + +********************************************************************/ +extern "C" UINT __stdcall ConfigureSmbInstall( + __in MSIHANDLE hInstall + ) +{ + HRESULT hr = S_OK; + UINT er = ERROR_SUCCESS; + + SCA_SMB* pssList = NULL; + + // initialize + hr = WcaInitialize(hInstall, "ConfigureSmbInstall"); + ExitOnFailure(hr, "Failed to initialize"); + + // check to see if necessary tables are specified + if (WcaTableExists(L"FileShare") != S_OK) + { + WcaLog(LOGMSG_VERBOSE, "Skipping SMB CustomAction, no FileShare table"); + ExitFunction1(hr = S_FALSE); + } + + hr = ScaSmbRead(&pssList); + ExitOnFailure(hr, "failed to read FileShare table"); + + hr = ScaSmbInstall(pssList); + ExitOnFailure(hr, "failed to install FileShares"); + +LExit: + if (pssList) + ScaSmbFreeList(pssList); + + er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; + return WcaFinalize(er); +} + + +/******************************************************************** +ConfigureSmb - CUSTOM ACTION ENTRY POINT for installing fileshare settings + +********************************************************************/ +extern "C" UINT __stdcall ConfigureSmbUninstall( + __in MSIHANDLE hInstall + ) +{ + HRESULT hr = S_OK; + UINT er = ERROR_SUCCESS; + + SCA_SMB* pssList = NULL; + + // initialize + hr = WcaInitialize(hInstall, "ConfigureSmbUninstall"); + ExitOnFailure(hr, "Failed to initialize"); + + // check to see if necessary tables are specified + if (WcaTableExists(L"FileShare") != S_OK) + { + WcaLog(LOGMSG_VERBOSE, "Skipping SMB CustomAction, no FileShare table"); + ExitFunction1(hr = S_FALSE); + } + + hr = ScaSmbRead(&pssList); + ExitOnFailure(hr, "failed to read FileShare table"); + + hr = ScaSmbUninstall(pssList); + ExitOnFailure(hr, "failed to uninstall FileShares"); + +LExit: + if (pssList) + ScaSmbFreeList(pssList); + + er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; + return WcaFinalize(er); +} + + +/******************************************************************** +ConfigureUsers - CUSTOM ACTION ENTRY POINT for installing users + +********************************************************************/ +extern "C" UINT __stdcall ConfigureUsers( + __in MSIHANDLE hInstall + ) +{ + //AssertSz(0, "Debug ConfigureUsers"); + + HRESULT hr = S_OK; + UINT er = ERROR_SUCCESS; + + BOOL fInitializedCom = FALSE; + SCA_USER* psuList = NULL; + + // initialize + hr = WcaInitialize(hInstall, "ConfigureUsers"); + ExitOnFailure(hr, "Failed to initialize"); + + hr = ::CoInitialize(NULL); + ExitOnFailure(hr, "failed to initialize COM"); + fInitializedCom = TRUE; + + hr = ScaUserRead(&psuList); + ExitOnFailure(hr, "failed to read User table"); + + hr = ScaUserExecute(psuList); + ExitOnFailure(hr, "failed to add/remove User actions"); + +LExit: + if (psuList) + { + ScaUserFreeList(psuList); + } + + if (fInitializedCom) + { + ::CoUninitialize(); + } + + er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; + return WcaFinalize(er); +} \ No newline at end of file -- cgit v1.2.3-55-g6feb