Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/installer-ca/wcautil.h

Issue 11521026: initial custom action library, "hello, world" quality (Closed)
Patch Set: Created Sept. 3, 2013, 12:48 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld