#pragma once | |
//------------------------------------------------------------------------------------------------- | |
// <copyright file="wiutil.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> | |
// Header for Windows Installer helper functions. | |
// </summary> | |
//------------------------------------------------------------------------------------------------- | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
// constants | |
#define IDNOACTION 0 | |
#define WIU_MB_OKIGNORECANCELRETRY 0xE | |
#define MAX_DARWIN_KEY 73 | |
#define MAX_DARWIN_COLUMN 255 | |
#define WIU_LOG_DEFAULT INSTALLLOGMODE_FATALEXIT | INSTALLLOGMODE_ERROR | INSTALLLOGMODE_WARNING | \ | |
INSTALLLOGMODE_USER | INSTALLLOGMODE_INFO | INSTALLLOGMODE_RESOLVESOURCE | \ | |
INSTALLLOGMODE_OUTOFDISKSPACE | INSTALLLOGMODE_ACTIONSTART | \ | |
INSTALLLOGMODE_ACTIONDATA | INSTALLLOGMODE_COMMONDATA | INSTALLLOGMODE_PROPERTYDUMP | |
#define ReleaseMsi(h) if (h) { ::MsiCloseHandle(h); } | |
#define ReleaseNullMsi(h) if (h) { ::MsiCloseHandle(h); h = NULL; } | |
enum WIU_RESTART | |
{ | |
WIU_RESTART_NONE, | |
WIU_RESTART_REQUIRED, | |
WIU_RESTART_INITIATED, | |
}; | |
enum WIU_MSI_EXECUTE_MESSAGE_TYPE | |
{ | |
WIU_MSI_EXECUTE_MESSAGE_NONE, | |
WIU_MSI_EXECUTE_MESSAGE_PROGRESS, | |
WIU_MSI_EXECUTE_MESSAGE_ERROR, | |
WIU_MSI_EXECUTE_MESSAGE_MSI_MESSAGE, | |
WIU_MSI_EXECUTE_MESSAGE_MSI_FILES_IN_USE, | |
}; | |
// structures | |
typedef struct _WIU_MSI_EXECUTE_MESSAGE | |
{ | |
WIU_MSI_EXECUTE_MESSAGE_TYPE type; | |
DWORD dwAllowedResults; | |
DWORD cData; | |
LPCWSTR* rgwzData; | |
INT nResultRecommendation; // recommended return result for this message based on analysis of real world installs. | |
union | |
{ | |
struct | |
{ | |
DWORD dwPercentage; | |
} progress; | |
struct | |
{ | |
DWORD dwErrorCode; | |
LPCWSTR wzMessage; | |
} error; | |
struct | |
{ | |
INSTALLMESSAGE mt; | |
LPCWSTR wzMessage; | |
} msiMessage; | |
struct | |
{ | |
DWORD cFiles; | |
LPCWSTR* rgwzFiles; | |
} msiFilesInUse; | |
}; | |
} WIU_MSI_EXECUTE_MESSAGE; | |
typedef struct _WIU_MSI_PROGRESS | |
{ | |
DWORD dwTotal; | |
DWORD dwCompleted; | |
DWORD dwStep; | |
BOOL fMoveForward; | |
BOOL fEnableActionData; | |
BOOL fScriptInProgress; | |
} WIU_MSI_PROGRESS; | |
typedef int (*PFN_MSIEXECUTEMESSAGEHANDLER)( | |
__in WIU_MSI_EXECUTE_MESSAGE* pMessage, | |
__in_opt LPVOID pvContext | |
); | |
typedef struct _WIU_MSI_EXECUTE_CONTEXT | |
{ | |
BOOL fRollback; | |
PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler; | |
LPVOID pvContext; | |
WIU_MSI_PROGRESS rgMsiProgress[64]; | |
DWORD dwCurrentProgressIndex; | |
INSTALLUILEVEL previousInstallUILevel; | |
HWND hwndPreviousParentWindow; | |
INSTALLUI_HANDLERW pfnPreviousExternalUI; | |
INSTALLUI_HANDLER_RECORD pfnPreviousExternalUIRecord; | |
BOOL fSetPreviousExternalUIRecord; | |
BOOL fSetPreviousExternalUI; | |
} WIU_MSI_EXECUTE_CONTEXT; | |
// typedefs | |
typedef UINT (WINAPI *PFN_MSIENABLELOGW)( | |
__in DWORD dwLogMode, | |
__in_z LPCWSTR szLogFile, | |
__in DWORD dwLogAttributes | |
); | |
typedef UINT (WINAPI *PFN_MSIGETPRODUCTINFOW)( | |
__in LPCWSTR szProductCode, | |
__in LPCWSTR szProperty, | |
__out_ecount_opt(*pcchValue) LPWSTR szValue, | |
__inout LPDWORD pcchValue | |
); | |
typedef INSTALLSTATE (WINAPI *PFN_MSIGETCOMPONENTPATHW)( | |
__in LPCWSTR szProduct, | |
__in LPCWSTR szComponent, | |
__out_ecount_opt(*pcchBuf) LPWSTR lpPathBuf, | |
__inout_opt LPDWORD pcchBuf | |
); | |
typedef INSTALLSTATE (WINAPI *PFN_MSILOCATECOMPONENTW)( | |
__in LPCWSTR szComponent, | |
__out_ecount_opt(*pcchBuf) LPWSTR lpPathBuf, | |
__inout_opt LPDWORD pcchBuf | |
); | |
typedef UINT (WINAPI *PFN_MSIGETPRODUCTINFOEXW)( | |
__in LPCWSTR szProductCode, | |
__in_opt LPCWSTR szUserSid, | |
__in MSIINSTALLCONTEXT dwContext, | |
__in LPCWSTR szProperty, | |
__out_ecount_opt(*pcchValue) LPWSTR szValue, | |
__inout_opt LPDWORD pcchValue | |
); | |
typedef INSTALLSTATE (WINAPI *PFN_MSIQUERYFEATURESTATEW)( | |
__in LPCWSTR szProduct, | |
__in LPCWSTR szFeature | |
); | |
typedef UINT (WINAPI *PFN_MSIGETPATCHINFOEXW)( | |
__in_z LPCWSTR wzPatchCode, | |
__in_z LPCWSTR wzProductCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in MSIINSTALLCONTEXT dwContext, | |
__in_z LPCWSTR wzProperty, | |
__out_opt LPWSTR wzValue, | |
__inout DWORD* pcchValue | |
); | |
typedef UINT (WINAPI *PFN_MSIDETERMINEPATCHSEQUENCEW)( | |
__in_z LPCWSTR wzProductCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in MSIINSTALLCONTEXT context, | |
__in DWORD cPatchInfo, | |
__in PMSIPATCHSEQUENCEINFOW pPatchInfo | |
); | |
typedef UINT (WINAPI *PFN_MSIINSTALLPRODUCTW)( | |
__in LPCWSTR szPackagePath, | |
__in_opt LPCWSTR szCommandLine | |
); | |
typedef UINT (WINAPI *PFN_MSICONFIGUREPRODUCTEXW)( | |
__in LPCWSTR szProduct, | |
__in int iInstallLevel, | |
__in INSTALLSTATE eInstallState, | |
__in_opt LPCWSTR szCommandLine | |
); | |
typedef UINT (WINAPI *PFN_MSIREMOVEPATCHESW)( | |
__in_z LPCWSTR wzPatchList, | |
__in_z LPCWSTR wzProductCode, | |
__in INSTALLTYPE eUninstallType, | |
__in_z_opt LPCWSTR szPropertyList | |
); | |
typedef INSTALLUILEVEL (WINAPI *PFN_MSISETINTERNALUI)( | |
__in INSTALLUILEVEL dwUILevel, | |
__inout_opt HWND *phWnd | |
); | |
typedef UINT (WINAPI *PFN_MSISETEXTERNALUIRECORD)( | |
__in_opt INSTALLUI_HANDLER_RECORD puiHandler, | |
__in DWORD dwMessageFilter, | |
__in_opt LPVOID pvContext, | |
__out_opt PINSTALLUI_HANDLER_RECORD ppuiPrevHandler | |
); | |
typedef INSTALLUI_HANDLERW (WINAPI *PFN_MSISETEXTERNALUIW)( | |
__in_opt INSTALLUI_HANDLERW puiHandler, | |
__in DWORD dwMessageFilter, | |
__in_opt LPVOID pvContext | |
); | |
typedef UINT (WINAPI *PFN_MSIENUMPRODUCTSW)( | |
__in DWORD iProductIndex, | |
__out_ecount(MAX_GUID_CHARS + 1) LPWSTR lpProductBuf | |
); | |
typedef UINT (WINAPI *PFN_MSIENUMPRODUCTSEXW)( | |
__in_z_opt LPCWSTR wzProductCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in DWORD dwContext, | |
__in DWORD dwIndex, | |
__out_opt WCHAR wzInstalledProductCode[39], | |
__out_opt MSIINSTALLCONTEXT *pdwInstalledContext, | |
__out_opt LPWSTR wzSid, | |
__inout_opt LPDWORD pcchSid | |
); | |
typedef UINT (WINAPI *PFN_MSIENUMRELATEDPRODUCTSW)( | |
__in LPCWSTR lpUpgradeCode, | |
__reserved DWORD dwReserved, | |
__in DWORD iProductIndex, | |
__out_ecount(MAX_GUID_CHARS + 1) LPWSTR lpProductBuf | |
); | |
typedef UINT (WINAPI *PFN_MSISOURCELISTADDSOURCEEXW)( | |
__in LPCWSTR szProductCodeOrPatchCode, | |
__in_opt LPCWSTR szUserSid, | |
__in MSIINSTALLCONTEXT dwContext, | |
__in DWORD dwOptions, | |
__in LPCWSTR szSource, | |
__in_opt DWORD dwIndex | |
); | |
HRESULT DAPI WiuInitialize( | |
); | |
void DAPI WiuUninitialize( | |
); | |
void DAPI WiuFunctionOverride( | |
__in_opt PFN_MSIENABLELOGW pfnMsiEnableLogW, | |
__in_opt PFN_MSIGETCOMPONENTPATHW pfnMsiGetComponentPathW, | |
__in_opt PFN_MSILOCATECOMPONENTW pfnMsiLocateComponentW, | |
__in_opt PFN_MSIQUERYFEATURESTATEW pfnMsiQueryFeatureStateW, | |
__in_opt PFN_MSIGETPRODUCTINFOW pfnMsiGetProductInfoW, | |
__in_opt PFN_MSIGETPRODUCTINFOEXW pfnMsiGetProductInfoExW, | |
__in_opt PFN_MSIINSTALLPRODUCTW pfnMsiInstallProductW, | |
__in_opt PFN_MSICONFIGUREPRODUCTEXW pfnMsiConfigureProductExW, | |
__in_opt PFN_MSISETINTERNALUI pfnMsiSetInternalUI, | |
__in_opt PFN_MSISETEXTERNALUIW pfnMsiSetExternalUIW, | |
__in_opt PFN_MSIENUMRELATEDPRODUCTSW pfnMsiEnumRelatedProductsW, | |
__in_opt PFN_MSISETEXTERNALUIRECORD pfnMsiSetExternalUIRecord, | |
__in_opt PFN_MSISOURCELISTADDSOURCEEXW pfnMsiSourceListAddSourceExW | |
); | |
HRESULT DAPI WiuGetComponentPath( | |
__in_z LPCWSTR wzProductCode, | |
__in_z LPCWSTR wzComponentId, | |
__out INSTALLSTATE* pInstallState, | |
__out_z LPWSTR* psczValue | |
); | |
HRESULT DAPI WiuLocateComponent( | |
__in_z LPCWSTR wzComponentId, | |
__out INSTALLSTATE* pInstallState, | |
__out_z LPWSTR* psczValue | |
); | |
HRESULT DAPI WiuQueryFeatureState( | |
__in_z LPCWSTR wzProduct, | |
__in_z LPCWSTR wzFeature, | |
__out INSTALLSTATE* pInstallState | |
); | |
HRESULT DAPI WiuGetProductInfo( | |
__in_z LPCWSTR wzProductCode, | |
__in_z LPCWSTR wzProperty, | |
__out LPWSTR* psczValue | |
); | |
HRESULT DAPI WiuGetProductInfoEx( | |
__in_z LPCWSTR wzProductCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in MSIINSTALLCONTEXT dwContext, | |
__in_z LPCWSTR wzProperty, | |
__out LPWSTR* psczValue | |
); | |
HRESULT DAPI WiuGetProductProperty( | |
__in MSIHANDLE hProduct, | |
__in_z LPCWSTR wzProperty, | |
__out LPWSTR* psczValue | |
); | |
HRESULT DAPI WiuGetPatchInfoEx( | |
__in_z LPCWSTR wzPatchCode, | |
__in_z LPCWSTR wzProductCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in MSIINSTALLCONTEXT dwContext, | |
__in_z LPCWSTR wzProperty, | |
__out LPWSTR* psczValue | |
); | |
HRESULT DAPI WiuDeterminePatchSequence( | |
__in_z LPCWSTR wzProductCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in MSIINSTALLCONTEXT context, | |
__in PMSIPATCHSEQUENCEINFOW pPatchInfo, | |
__in DWORD cPatchInfo | |
); | |
HRESULT DAPI WiuEnumProducts( | |
__in DWORD iProductIndex, | |
__out_ecount(MAX_GUID_CHARS + 1) LPWSTR wzProductCode | |
); | |
HRESULT DAPI WiuEnumProductsEx( | |
__in_z_opt LPCWSTR wzProductCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in DWORD dwContext, | |
__in DWORD dwIndex, | |
__out_opt WCHAR wzInstalledProductCode[39], | |
__out_opt MSIINSTALLCONTEXT *pdwInstalledContext, | |
__out_opt LPWSTR wzSid, | |
__inout_opt LPDWORD pcchSid | |
); | |
HRESULT DAPI WiuEnumRelatedProducts( | |
__in_z LPCWSTR wzUpgradeCode, | |
__in DWORD iProductIndex, | |
__out_ecount(MAX_GUID_CHARS + 1) LPWSTR wzProductCode | |
); | |
HRESULT DAPI WiuEnableLog( | |
__in DWORD dwLogMode, | |
__in_z LPCWSTR wzLogFile, | |
__in DWORD dwLogAttributes | |
); | |
HRESULT DAPI WiuInitializeExternalUI( | |
__in PFN_MSIEXECUTEMESSAGEHANDLER pfnMessageHandler, | |
__in INSTALLUILEVEL internalUILevel, | |
__in HWND hwndParent, | |
__in LPVOID pvContext, | |
__in BOOL fRollback, | |
__in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext | |
); | |
void DAPI WiuUninitializeExternalUI( | |
__in WIU_MSI_EXECUTE_CONTEXT* pExecuteContext | |
); | |
HRESULT DAPI WiuConfigureProductEx( | |
__in_z LPCWSTR wzProduct, | |
__in int iInstallLevel, | |
__in INSTALLSTATE eInstallState, | |
__in_z LPCWSTR wzCommandLine, | |
__out WIU_RESTART* pRestart | |
); | |
HRESULT DAPI WiuInstallProduct( | |
__in_z LPCWSTR wzPackagPath, | |
__in_z LPCWSTR wzCommandLine, | |
__out WIU_RESTART* pRestart | |
); | |
HRESULT DAPI WiuRemovePatches( | |
__in_z LPCWSTR wzPatchList, | |
__in_z LPCWSTR wzProductCode, | |
__in_z LPCWSTR wzPropertyList, | |
__out WIU_RESTART* pRestart | |
); | |
HRESULT DAPI WiuSourceListAddSourceEx( | |
__in_z LPCWSTR wzProductCodeOrPatchCode, | |
__in_z_opt LPCWSTR wzUserSid, | |
__in MSIINSTALLCONTEXT dwContext, | |
__in DWORD dwCode, | |
__in_z LPCWSTR wzSource, | |
__in_opt DWORD dwIndex | |
); | |
#ifdef __cplusplus | |
} | |
#endif |