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 |