| Index: src/installer-ca/wcautil.h |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/src/installer-ca/wcautil.h |
| @@ -0,0 +1,363 @@ |
| +#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/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 WcaWriteStringToCaData( |
| + __in_z LPCWSTR wzString, |
| + __deref_inout_z LPWSTR* ppwzCustomActionData |
| + ); |
| +HRESULT WIXAPI WcaWriteIntegerToCaData( |
| + __in int i, |
| + __deref_out_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 |