372 lines
10 KiB
C
372 lines
10 KiB
C
#pragma once
|
|
//-------------------------------------------------------------------------------------------------
|
|
// <copyright file="wcautil.h" company="Outercurve Foundation">
|
|
// Copyright (c) 2004, Outercurve Foundation.
|
|
// This software is released under Microsoft Reciprocal License (MS-RL).
|
|
// The license and further copyright text can be found in the file
|
|
// LICENSE.TXT at the root directory of the distribution.
|
|
// </copyright>
|
|
//
|
|
// <summary>
|
|
// Windows Installer XML CustomAction utility library.
|
|
// </summary>
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define WIXAPI __stdcall
|
|
#define ExitTrace WcaLogError
|
|
#define ExitTrace1 WcaLogError
|
|
#define ExitTrace2 WcaLogError
|
|
#define ExitTrace3 WcaLogError
|
|
|
|
#include "dutil.h"
|
|
|
|
#define MessageExitOnLastError(x, e, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ExitTrace(x, "%s", s); WcaErrorMessage(e, x, MB_OK, 0); goto LExit; } }
|
|
#define MessageExitOnLastError1(x, e, f, s) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (FAILED(x)) { ExitTrace1(x, f, s); WcaErrorMessage(e, x, MB_OK, 1, s); goto LExit; } }
|
|
|
|
#define MessageExitOnFailure(x, e, s) if (FAILED(x)) { ExitTrace(x, "%s", s); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 0); goto LExit; }
|
|
#define MessageExitOnFailure1(x, e, f, s) if (FAILED(x)) { ExitTrace1(x, f, s); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 1, s); goto LExit; }
|
|
#define MessageExitOnFailure2(x, e, f, s, t) if (FAILED(x)) { ExitTrace2(x, f, s, t); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 2, s, t); goto LExit; }
|
|
#define MessageExitOnFailure3(x, e, f, s, t, u) if (FAILED(x)) { ExitTrace2(x, f, s, t, u); WcaErrorMessage(e, x, INSTALLMESSAGE_ERROR | MB_OK, 3, s, t, u); goto LExit; }
|
|
|
|
#define MessageExitOnNullWithLastError(p, x, e, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, "%s", s); WcaErrorMessage(e, x, MB_OK, 0); goto LExit; }
|
|
#define MessageExitOnNullWithLastError1(p, x, e, f, s) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, f, s); WcaErrorMessage(e, x, MB_OK, 1, s); goto LExit; }
|
|
#define MessageExitOnNullWithLastError2(p, x, e, f, s, t) if (NULL == p) { x = ::GetLastError(); x = HRESULT_FROM_WIN32(x); if (!FAILED(x)) { x = E_FAIL; } ExitTrace(x, f, s, t); WcaErrorMessage(e, x, MB_OK, 2, s, t); goto LExit; }
|
|
|
|
// Generic action enum.
|
|
enum WCA_ACTION
|
|
{
|
|
WCA_ACTION_NONE,
|
|
WCA_ACTION_INSTALL,
|
|
WCA_ACTION_UNINSTALL,
|
|
};
|
|
|
|
enum WCA_CASCRIPT
|
|
{
|
|
WCA_CASCRIPT_SCHEDULED,
|
|
WCA_CASCRIPT_ROLLBACK,
|
|
};
|
|
|
|
enum WCA_CASCRIPT_CLOSE
|
|
{
|
|
WCA_CASCRIPT_CLOSE_PRESERVE,
|
|
WCA_CASCRIPT_CLOSE_DELETE,
|
|
};
|
|
|
|
enum WCA_TODO
|
|
{
|
|
WCA_TODO_UNKNOWN,
|
|
WCA_TODO_INSTALL,
|
|
WCA_TODO_UNINSTALL,
|
|
WCA_TODO_REINSTALL,
|
|
};
|
|
|
|
typedef struct WCA_CASCRIPT_STRUCT
|
|
{
|
|
LPWSTR pwzScriptPath;
|
|
HANDLE hScriptFile;
|
|
} *WCA_CASCRIPT_HANDLE;
|
|
|
|
void WIXAPI WcaGlobalInitialize(
|
|
__in HINSTANCE hInst
|
|
);
|
|
void WIXAPI WcaGlobalFinalize();
|
|
|
|
HRESULT WIXAPI WcaInitialize(
|
|
__in MSIHANDLE hInstall,
|
|
__in_z PCSTR szCustomActionLogName
|
|
);
|
|
UINT WIXAPI WcaFinalize(
|
|
__in UINT iReturnValue
|
|
);
|
|
BOOL WIXAPI WcaIsInitialized();
|
|
|
|
MSIHANDLE WIXAPI WcaGetInstallHandle();
|
|
MSIHANDLE WIXAPI WcaGetDatabaseHandle();
|
|
|
|
const char* WIXAPI WcaGetLogName();
|
|
|
|
void WIXAPI WcaSetReturnValue(
|
|
__in UINT iReturnValue
|
|
);
|
|
BOOL WIXAPI WcaCancelDetected();
|
|
|
|
const int LOG_BUFFER = 2048;
|
|
enum LOGLEVEL
|
|
{
|
|
LOGMSG_TRACEONLY, // Never written to the log file (except in DEBUG builds)
|
|
LOGMSG_VERBOSE, // Written to log when LOGVERBOSE
|
|
LOGMSG_STANDARD // Written to log whenever informational logging is enabled
|
|
};
|
|
|
|
void __cdecl WcaLog(
|
|
__in LOGLEVEL llv,
|
|
__in_z __format_string PCSTR fmt, ...
|
|
);
|
|
BOOL WIXAPI WcaDisplayAssert(
|
|
__in LPCSTR sz
|
|
);
|
|
void __cdecl WcaLogError(
|
|
__in HRESULT hr,
|
|
__in LPCSTR szMessage,
|
|
...
|
|
);
|
|
|
|
UINT WIXAPI WcaProcessMessage(
|
|
__in INSTALLMESSAGE eMessageType,
|
|
__in MSIHANDLE hRecord
|
|
);
|
|
UINT __cdecl WcaErrorMessage(
|
|
__in int iError,
|
|
__in HRESULT hrError,
|
|
__in UINT uiType,
|
|
__in DWORD cArgs,
|
|
...
|
|
);
|
|
HRESULT WIXAPI WcaProgressMessage(
|
|
__in UINT uiCost,
|
|
__in BOOL fExtendProgressBar
|
|
);
|
|
|
|
BOOL WIXAPI WcaIsInstalling(
|
|
__in INSTALLSTATE isInstalled,
|
|
__in INSTALLSTATE isAction
|
|
);
|
|
BOOL WIXAPI WcaIsReInstalling(
|
|
__in INSTALLSTATE isInstalled,
|
|
__in INSTALLSTATE isAction
|
|
);
|
|
BOOL WIXAPI WcaIsUninstalling(
|
|
__in INSTALLSTATE isInstalled,
|
|
__in INSTALLSTATE isAction
|
|
);
|
|
|
|
HRESULT WIXAPI WcaSetComponentState(
|
|
__in_z LPCWSTR wzComponent,
|
|
__in INSTALLSTATE isState
|
|
);
|
|
|
|
HRESULT WIXAPI WcaTableExists(
|
|
__in_z LPCWSTR wzTable
|
|
);
|
|
|
|
HRESULT WIXAPI WcaOpenView(
|
|
__in_z LPCWSTR wzSql,
|
|
__out MSIHANDLE* phView
|
|
);
|
|
HRESULT WIXAPI WcaExecuteView(
|
|
__in MSIHANDLE hView,
|
|
__in MSIHANDLE hRec
|
|
);
|
|
HRESULT WIXAPI WcaOpenExecuteView(
|
|
__in_z LPCWSTR wzSql,
|
|
__out MSIHANDLE* phView
|
|
);
|
|
HRESULT WIXAPI WcaFetchRecord(
|
|
__in MSIHANDLE hView,
|
|
__out MSIHANDLE* phRec
|
|
);
|
|
HRESULT WIXAPI WcaFetchSingleRecord(
|
|
__in MSIHANDLE hView,
|
|
__out MSIHANDLE* phRec
|
|
);
|
|
|
|
HRESULT WIXAPI WcaGetProperty(
|
|
__in_z LPCWSTR wzProperty,
|
|
__inout LPWSTR* ppwzData
|
|
);
|
|
HRESULT WIXAPI WcaGetFormattedProperty(
|
|
__in_z LPCWSTR wzProperty,
|
|
__out LPWSTR* ppwzData
|
|
);
|
|
HRESULT WIXAPI WcaGetFormattedString(
|
|
__in_z LPCWSTR wzString,
|
|
__out LPWSTR* ppwzData
|
|
);
|
|
HRESULT WIXAPI WcaGetIntProperty(
|
|
__in_z LPCWSTR wzProperty,
|
|
__inout int* piData
|
|
);
|
|
HRESULT WIXAPI WcaGetTargetPath(
|
|
__in_z LPCWSTR wzFolder,
|
|
__out LPWSTR* ppwzData
|
|
);
|
|
HRESULT WIXAPI WcaSetProperty(
|
|
__in_z LPCWSTR wzPropertyName,
|
|
__in_z LPCWSTR wzPropertyValue
|
|
);
|
|
HRESULT WIXAPI WcaSetIntProperty(
|
|
__in_z LPCWSTR wzPropertyName,
|
|
__in int nPropertyValue
|
|
);
|
|
BOOL WIXAPI WcaIsPropertySet(
|
|
__in LPCSTR szProperty
|
|
);
|
|
BOOL WIXAPI WcaIsUnicodePropertySet(
|
|
__in LPCWSTR wzProperty
|
|
);
|
|
|
|
HRESULT WIXAPI WcaGetRecordInteger(
|
|
__in MSIHANDLE hRec,
|
|
__in UINT uiField,
|
|
__inout int* piData
|
|
);
|
|
HRESULT WIXAPI WcaGetRecordString(
|
|
__in MSIHANDLE hRec,
|
|
__in UINT uiField,
|
|
__inout LPWSTR* ppwzData
|
|
);
|
|
HRESULT WIXAPI WcaGetRecordFormattedInteger(
|
|
__in MSIHANDLE hRec,
|
|
__in UINT uiField,
|
|
__out int* piData
|
|
);
|
|
HRESULT WIXAPI WcaGetRecordFormattedString(
|
|
__in MSIHANDLE hRec,
|
|
__in UINT uiField,
|
|
__inout LPWSTR* ppwzData
|
|
);
|
|
|
|
HRESULT WIXAPI WcaAllocStream(
|
|
__deref_out_bcount_part(cbData, 0) BYTE** ppbData,
|
|
__in DWORD cbData
|
|
);
|
|
HRESULT WIXAPI WcaFreeStream(
|
|
__in BYTE* pbData
|
|
);
|
|
|
|
HRESULT WIXAPI WcaGetRecordStream(
|
|
__in MSIHANDLE hRecBinary,
|
|
__in UINT uiField,
|
|
__deref_out_bcount_full(*pcbData) BYTE** ppbData,
|
|
__out DWORD* pcbData
|
|
);
|
|
HRESULT WIXAPI WcaSetRecordString(
|
|
__in MSIHANDLE hRec,
|
|
__in UINT uiField,
|
|
__in_z LPCWSTR wzData
|
|
);
|
|
HRESULT WIXAPI WcaSetRecordInteger(
|
|
__in MSIHANDLE hRec,
|
|
__in UINT uiField,
|
|
__in int iValue
|
|
);
|
|
|
|
HRESULT WIXAPI WcaDoDeferredAction(
|
|
__in_z LPCWSTR wzAction,
|
|
__in_z LPCWSTR wzCustomActionData,
|
|
__in UINT uiCost
|
|
);
|
|
DWORD WIXAPI WcaCountOfCustomActionDataRecords(
|
|
__in_z LPCWSTR wzData
|
|
);
|
|
|
|
HRESULT WIXAPI WcaReadStringFromCaData(
|
|
__deref_in LPWSTR* ppwzCustomActionData,
|
|
__deref_out_z LPWSTR* ppwzString
|
|
);
|
|
HRESULT WIXAPI WcaReadIntegerFromCaData(
|
|
__deref_in LPWSTR* ppwzCustomActionData,
|
|
__out int* piResult
|
|
);
|
|
HRESULT WIXAPI WcaReadStreamFromCaData(
|
|
__deref_in LPWSTR* ppwzCustomActionData,
|
|
__deref_out_bcount(*pcbData) BYTE** ppbData,
|
|
__out DWORD_PTR* pcbData
|
|
);
|
|
HRESULT WIXAPI WcaWriteStringToCaData(
|
|
__in_z LPCWSTR wzString,
|
|
__deref_inout_z LPWSTR* ppwzCustomActionData
|
|
);
|
|
HRESULT WIXAPI WcaWriteIntegerToCaData(
|
|
__in int i,
|
|
__deref_out_z_opt LPWSTR* ppwzCustomActionData
|
|
);
|
|
HRESULT WIXAPI WcaWriteStreamToCaData(
|
|
__in_bcount(cbData) const BYTE* pbData,
|
|
__in DWORD cbData,
|
|
__deref_inout_z_opt LPWSTR* ppwzCustomActionData
|
|
);
|
|
|
|
HRESULT __cdecl WcaAddTempRecord(
|
|
__inout MSIHANDLE* phTableView,
|
|
__inout MSIHANDLE* phColumns,
|
|
__in_z LPCWSTR wzTable,
|
|
__out_opt MSIDBERROR* pdbError,
|
|
__in UINT uiUniquifyColumn,
|
|
__in UINT cColumns,
|
|
...
|
|
);
|
|
|
|
HRESULT WIXAPI WcaDumpTable(
|
|
__in_z LPCWSTR wzTable
|
|
);
|
|
|
|
HRESULT WIXAPI WcaDeferredActionRequiresReboot();
|
|
BOOL WIXAPI WcaDidDeferredActionRequireReboot();
|
|
|
|
HRESULT WIXAPI WcaCaScriptCreateKey(
|
|
__out LPWSTR* ppwzScriptKey
|
|
);
|
|
|
|
HRESULT WIXAPI WcaCaScriptCreate(
|
|
__in WCA_ACTION action,
|
|
__in WCA_CASCRIPT script,
|
|
__in BOOL fImpersonated,
|
|
__in_z LPCWSTR wzScriptKey,
|
|
__in BOOL fAppend,
|
|
__out WCA_CASCRIPT_HANDLE* phScript
|
|
);
|
|
|
|
HRESULT WIXAPI WcaCaScriptOpen(
|
|
__in WCA_ACTION action,
|
|
__in WCA_CASCRIPT script,
|
|
__in BOOL fImpersonated,
|
|
__in_z LPCWSTR wzScriptKey,
|
|
__out WCA_CASCRIPT_HANDLE* phScript
|
|
);
|
|
|
|
void WIXAPI WcaCaScriptClose(
|
|
__in_opt WCA_CASCRIPT_HANDLE hScript,
|
|
__in WCA_CASCRIPT_CLOSE closeOperation
|
|
);
|
|
|
|
HRESULT WIXAPI WcaCaScriptReadAsCustomActionData(
|
|
__in WCA_CASCRIPT_HANDLE hScript,
|
|
__out LPWSTR* ppwzCustomActionData
|
|
);
|
|
|
|
HRESULT WIXAPI WcaCaScriptWriteString(
|
|
__in WCA_CASCRIPT_HANDLE hScript,
|
|
__in_z LPCWSTR wzValue
|
|
);
|
|
|
|
HRESULT WIXAPI WcaCaScriptWriteNumber(
|
|
__in WCA_CASCRIPT_HANDLE hScript,
|
|
__in DWORD dwValue
|
|
);
|
|
|
|
void WIXAPI WcaCaScriptFlush(
|
|
__in WCA_CASCRIPT_HANDLE hScript
|
|
);
|
|
|
|
void WIXAPI WcaCaScriptCleanup(
|
|
__in_z LPCWSTR wzProductCode,
|
|
__in BOOL fImpersonated
|
|
);
|
|
|
|
HRESULT WIXAPI QuietExec(
|
|
__inout_z LPWSTR wzCommand,
|
|
__in DWORD dwTimeout
|
|
);
|
|
|
|
WCA_TODO WIXAPI WcaGetComponentToDo(
|
|
__in_z LPCWSTR wzComponentId
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|