365 lines
11 KiB
C
365 lines
11 KiB
C
#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 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
|