Msi.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:68k
源码类别:

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************
  2. *                                                                             *
  3. * msi.h - - Interface for external access to Installer Service                *
  4. *                                                                             *
  5. * Version 2.0                                                                 *
  6. *                                                                             *
  7. * NOTES:  All buffers sizes are TCHAR count, null included only on input      *
  8. *         Return argument pointers may be null if not interested in value     *
  9. *                                                                             *
  10. * Copyright (c) 1996-2001, Microsoft Corp.      All rights reserved.          *
  11. *                                                                             *
  12. *****************************************************************************/
  13. #ifndef _MSI_H_
  14. #define _MSI_H_
  15. #ifndef _WIN32_MSI
  16. #if (_WIN32_WINNT >= 0x0501)
  17. #define _WIN32_MSI   200
  18. #elif (_WIN32_WINNT >= 0x0500)
  19. #define _WIN32_MSI   110
  20. #else
  21. #define _WIN32_MSI   100
  22. #endif //_WIN32_WINNT
  23. #endif // !_WIN32_MSI
  24. #if (_WIN32_MSI >= 150)
  25. #ifndef _MSI_NO_CRYPTO
  26. #include "wincrypt.h"
  27. #endif // _MSI_NO_CRYPTO
  28. #endif //(_WIN32_MSI >= 150)
  29. // --------------------------------------------------------------------------
  30. // Installer generic handle definitions
  31. // --------------------------------------------------------------------------
  32. typedef unsigned long MSIHANDLE;     // abstract generic handle, 0 == no handle
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36. // Close a open handle of any type
  37. // All handles obtained from API calls must be closed when no longer needed
  38. // Normally succeeds, returning TRUE. 
  39. UINT WINAPI MsiCloseHandle(MSIHANDLE hAny);
  40. // Close all handles open in the process, a diagnostic call
  41. // This should NOT be used as a cleanup mechanism -- use PMSIHANDLE class
  42. // Can be called at termination to assure that all handles have been closed
  43. // Returns 0 if all handles have been close, else number of open handles
  44. UINT WINAPI MsiCloseAllHandles();
  45. #ifdef __cplusplus
  46. }
  47. #endif
  48. #ifdef __cplusplus
  49. // C++ wrapper object to automatically free handle when going out of scope
  50. class PMSIHANDLE
  51. {
  52. MSIHANDLE m_h;
  53.  public:
  54. PMSIHANDLE():m_h(0){}
  55. PMSIHANDLE(MSIHANDLE h):m_h(h){}
  56.   ~PMSIHANDLE(){if (m_h!=0) MsiCloseHandle(m_h);}
  57. void operator =(MSIHANDLE h) {if (m_h) MsiCloseHandle(m_h); m_h=h;}
  58. operator MSIHANDLE() {return m_h;}
  59. MSIHANDLE* operator &() {if (m_h) MsiCloseHandle(m_h); m_h = 0; return &m_h;}
  60. };
  61. #endif  //__cplusplus
  62. // Install message type for callback is a combination of the following:
  63. //  A message box style:      MB_*, where MB_OK is the default
  64. //  A message box icon type:  MB_ICON*, where no icon is the default
  65. //  A default button:         MB_DEFBUTTON?, where MB_DEFBUTTON1 is the default
  66. //  One of the following install message types, no default
  67. typedef enum tagINSTALLMESSAGE
  68. {
  69. INSTALLMESSAGE_FATALEXIT      = 0x00000000L, // premature termination, possibly fatal OOM
  70. INSTALLMESSAGE_ERROR          = 0x01000000L, // formatted error message
  71. INSTALLMESSAGE_WARNING        = 0x02000000L, // formatted warning message
  72. INSTALLMESSAGE_USER           = 0x03000000L, // user request message
  73. INSTALLMESSAGE_INFO           = 0x04000000L, // informative message for log
  74. INSTALLMESSAGE_FILESINUSE     = 0x05000000L, // list of files in use that need to be replaced
  75. INSTALLMESSAGE_RESOLVESOURCE  = 0x06000000L, // request to determine a valid source location
  76. INSTALLMESSAGE_OUTOFDISKSPACE = 0x07000000L, // insufficient disk space message
  77. INSTALLMESSAGE_ACTIONSTART    = 0x08000000L, // start of action: action name & description
  78. INSTALLMESSAGE_ACTIONDATA     = 0x09000000L, // formatted data associated with individual action item
  79. INSTALLMESSAGE_PROGRESS       = 0x0A000000L, // progress gauge info: units so far, total
  80. INSTALLMESSAGE_COMMONDATA     = 0x0B000000L, // product info for dialog: language Id, dialog caption
  81. INSTALLMESSAGE_INITIALIZE     = 0x0C000000L, // sent prior to UI initialization, no string data
  82. INSTALLMESSAGE_TERMINATE      = 0x0D000000L, // sent after UI termination, no string data
  83. INSTALLMESSAGE_SHOWDIALOG     = 0x0E000000L, // sent prior to display or authored dialog or wizard
  84. } INSTALLMESSAGE;
  85. // external error handler supplied to installation API functions
  86. typedef int (WINAPI *INSTALLUI_HANDLERA)(LPVOID pvContext, UINT iMessageType, LPCSTR szMessage);
  87. // external error handler supplied to installation API functions
  88. typedef int (WINAPI *INSTALLUI_HANDLERW)(LPVOID pvContext, UINT iMessageType, LPCWSTR szMessage);
  89. #ifdef UNICODE
  90. #define INSTALLUI_HANDLER  INSTALLUI_HANDLERW
  91. #else
  92. #define INSTALLUI_HANDLER  INSTALLUI_HANDLERA
  93. #endif // !UNICODE
  94. typedef enum tagINSTALLUILEVEL
  95. {
  96. INSTALLUILEVEL_NOCHANGE = 0,    // UI level is unchanged
  97. INSTALLUILEVEL_DEFAULT  = 1,    // default UI is used
  98. INSTALLUILEVEL_NONE     = 2,    // completely silent installation
  99. INSTALLUILEVEL_BASIC    = 3,    // simple progress and error handling
  100. INSTALLUILEVEL_REDUCED  = 4,    // authored UI, wizard dialogs suppressed
  101. INSTALLUILEVEL_FULL     = 5,    // authored UI with wizards, progress, errors
  102. INSTALLUILEVEL_ENDDIALOG    = 0x80, // display success/failure dialog at end of install
  103. INSTALLUILEVEL_PROGRESSONLY = 0x40, // display only progress dialog
  104. INSTALLUILEVEL_HIDECANCEL   = 0x20, // do not display the cancel button in basic UI
  105. INSTALLUILEVEL_SOURCERESONLY = 0x100, // force display of source resolution even if quiet
  106. } INSTALLUILEVEL;
  107. typedef enum tagINSTALLSTATE
  108. {
  109. INSTALLSTATE_NOTUSED      = -7,  // component disabled
  110. INSTALLSTATE_BADCONFIG    = -6,  // configuration data corrupt
  111. INSTALLSTATE_INCOMPLETE   = -5,  // installation suspended or in progress
  112. INSTALLSTATE_SOURCEABSENT = -4,  // run from source, source is unavailable
  113. INSTALLSTATE_MOREDATA     = -3,  // return buffer overflow
  114. INSTALLSTATE_INVALIDARG   = -2,  // invalid function argument
  115. INSTALLSTATE_UNKNOWN      = -1,  // unrecognized product or feature
  116. INSTALLSTATE_BROKEN       =  0,  // broken
  117. INSTALLSTATE_ADVERTISED   =  1,  // advertised feature
  118. INSTALLSTATE_REMOVED      =  1,  // component being removed (action state, not settable)
  119. INSTALLSTATE_ABSENT       =  2,  // uninstalled (or action state absent but clients remain)
  120. INSTALLSTATE_LOCAL        =  3,  // installed on local drive
  121. INSTALLSTATE_SOURCE       =  4,  // run from source, CD or net
  122. INSTALLSTATE_DEFAULT      =  5,  // use default, local or source
  123. } INSTALLSTATE;
  124. typedef enum tagUSERINFOSTATE
  125. {
  126. USERINFOSTATE_MOREDATA   = -3,  // return buffer overflow
  127. USERINFOSTATE_INVALIDARG = -2,  // invalid function argument
  128. USERINFOSTATE_UNKNOWN    = -1,  // unrecognized product
  129. USERINFOSTATE_ABSENT     =  0,  // user info and PID not initialized
  130. USERINFOSTATE_PRESENT    =  1,  // user info and PID initialized
  131. } USERINFOSTATE;
  132. typedef enum tagINSTALLLEVEL
  133. {
  134. INSTALLLEVEL_DEFAULT = 0,      // install authored default
  135. INSTALLLEVEL_MINIMUM = 1,      // install only required features
  136. INSTALLLEVEL_MAXIMUM = 0xFFFF, // install all features
  137. } INSTALLLEVEL;                   // intermediate levels dependent on authoring
  138. typedef enum tagREINSTALLMODE  // bit flags
  139. {
  140. REINSTALLMODE_REPAIR           = 0x00000001,  // Reserved bit - currently ignored
  141. REINSTALLMODE_FILEMISSING      = 0x00000002,  // Reinstall only if file is missing
  142. REINSTALLMODE_FILEOLDERVERSION = 0x00000004,  // Reinstall if file is missing, or older version
  143. REINSTALLMODE_FILEEQUALVERSION = 0x00000008,  // Reinstall if file is missing, or equal or older version
  144. REINSTALLMODE_FILEEXACT        = 0x00000010,  // Reinstall if file is missing, or not exact version
  145. REINSTALLMODE_FILEVERIFY       = 0x00000020,  // checksum executables, reinstall if missing or corrupt
  146. REINSTALLMODE_FILEREPLACE      = 0x00000040,  // Reinstall all files, regardless of version
  147. REINSTALLMODE_MACHINEDATA      = 0x00000080,  // insure required machine reg entries
  148. REINSTALLMODE_USERDATA         = 0x00000100,  // insure required user reg entries
  149. REINSTALLMODE_SHORTCUT         = 0x00000200,  // validate shortcuts items
  150. REINSTALLMODE_PACKAGE          = 0x00000400,  // use re-cache source install package
  151. } REINSTALLMODE;
  152. typedef enum tagINSTALLOGMODE  // bit flags for use with MsiEnableLog and MsiSetExternalUI
  153. {
  154. INSTALLLOGMODE_FATALEXIT      = (1 << (INSTALLMESSAGE_FATALEXIT      >> 24)),
  155. INSTALLLOGMODE_ERROR          = (1 << (INSTALLMESSAGE_ERROR          >> 24)),
  156. INSTALLLOGMODE_WARNING        = (1 << (INSTALLMESSAGE_WARNING        >> 24)),
  157. INSTALLLOGMODE_USER           = (1 << (INSTALLMESSAGE_USER           >> 24)),
  158. INSTALLLOGMODE_INFO           = (1 << (INSTALLMESSAGE_INFO           >> 24)),
  159. INSTALLLOGMODE_RESOLVESOURCE  = (1 << (INSTALLMESSAGE_RESOLVESOURCE  >> 24)),
  160. INSTALLLOGMODE_OUTOFDISKSPACE = (1 << (INSTALLMESSAGE_OUTOFDISKSPACE >> 24)),
  161. INSTALLLOGMODE_ACTIONSTART    = (1 << (INSTALLMESSAGE_ACTIONSTART    >> 24)),
  162. INSTALLLOGMODE_ACTIONDATA     = (1 << (INSTALLMESSAGE_ACTIONDATA     >> 24)),
  163. INSTALLLOGMODE_COMMONDATA     = (1 << (INSTALLMESSAGE_COMMONDATA     >> 24)),
  164. INSTALLLOGMODE_PROPERTYDUMP   = (1 << (INSTALLMESSAGE_PROGRESS       >> 24)), // log only
  165. INSTALLLOGMODE_VERBOSE        = (1 << (INSTALLMESSAGE_INITIALIZE     >> 24)), // log only
  166. INSTALLLOGMODE_PROGRESS       = (1 << (INSTALLMESSAGE_PROGRESS       >> 24)), // external handler only
  167. INSTALLLOGMODE_INITIALIZE     = (1 << (INSTALLMESSAGE_INITIALIZE     >> 24)), // external handler only
  168. INSTALLLOGMODE_TERMINATE      = (1 << (INSTALLMESSAGE_TERMINATE      >> 24)), // external handler only
  169. INSTALLLOGMODE_SHOWDIALOG     = (1 << (INSTALLMESSAGE_SHOWDIALOG     >> 24)), // external handler only
  170. } INSTALLLOGMODE;
  171. typedef enum tagINSTALLLOGATTRIBUTES // flag attributes for MsiEnableLog
  172. {
  173. INSTALLLOGATTRIBUTES_APPEND            = (1 << 0),
  174. INSTALLLOGATTRIBUTES_FLUSHEACHLINE     = (1 << 1),
  175. } INSTALLLOGATTRIBUTES;
  176. typedef enum tagINSTALLFEATUREATTRIBUTE // bit flags
  177. {
  178. INSTALLFEATUREATTRIBUTE_FAVORLOCAL             = 1 << 0,
  179. INSTALLFEATUREATTRIBUTE_FAVORSOURCE            = 1 << 1,
  180. INSTALLFEATUREATTRIBUTE_FOLLOWPARENT           = 1 << 2,
  181. INSTALLFEATUREATTRIBUTE_FAVORADVERTISE         = 1 << 3,
  182. INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE      = 1 << 4,
  183. INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE = 1 << 5,
  184. } INSTALLFEATUREATTRIBUTE;
  185. typedef enum tagINSTALLMODE
  186. {
  187. INSTALLMODE_NOSOURCERESOLUTION   = -3,  // skip source resolution
  188. INSTALLMODE_NODETECTION          = -2,  // skip detection
  189. INSTALLMODE_EXISTING             = -1,  // provide, if available
  190. INSTALLMODE_DEFAULT              =  0,  // install, if absent
  191. } INSTALLMODE;
  192. #define MAX_FEATURE_CHARS  38   // maximum chars in feature name (same as string GUID)
  193. // Product info attributes: advertised information
  194. #define INSTALLPROPERTY_PACKAGENAME           __TEXT("PackageName")
  195. #define INSTALLPROPERTY_TRANSFORMS            __TEXT("Transforms")
  196. #define INSTALLPROPERTY_LANGUAGE              __TEXT("Language")
  197. #define INSTALLPROPERTY_PRODUCTNAME           __TEXT("ProductName")
  198. #define INSTALLPROPERTY_ASSIGNMENTTYPE        __TEXT("AssignmentType")
  199. #define INSTALLPROPERTY_PACKAGECODE           __TEXT("PackageCode")
  200. #define INSTALLPROPERTY_VERSION               __TEXT("Version")
  201. #if (_WIN32_MSI >=  110)
  202. #define INSTALLPROPERTY_PRODUCTICON           __TEXT("ProductIcon")
  203. #endif //(_WIN32_MSI >=  110)
  204. // Product info attributes: installed information
  205. #define INSTALLPROPERTY_INSTALLEDPRODUCTNAME  __TEXT("InstalledProductName")
  206. #define INSTALLPROPERTY_VERSIONSTRING         __TEXT("VersionString")
  207. #define INSTALLPROPERTY_HELPLINK              __TEXT("HelpLink")
  208. #define INSTALLPROPERTY_HELPTELEPHONE         __TEXT("HelpTelephone")
  209. #define INSTALLPROPERTY_INSTALLLOCATION       __TEXT("InstallLocation")
  210. #define INSTALLPROPERTY_INSTALLSOURCE         __TEXT("InstallSource")
  211. #define INSTALLPROPERTY_INSTALLDATE           __TEXT("InstallDate")
  212. #define INSTALLPROPERTY_PUBLISHER             __TEXT("Publisher")
  213. #define INSTALLPROPERTY_LOCALPACKAGE          __TEXT("LocalPackage")
  214. #define INSTALLPROPERTY_URLINFOABOUT          __TEXT("URLInfoAbout")
  215. #define INSTALLPROPERTY_URLUPDATEINFO         __TEXT("URLUpdateInfo")
  216. #define INSTALLPROPERTY_VERSIONMINOR          __TEXT("VersionMinor")
  217. #define INSTALLPROPERTY_VERSIONMAJOR          __TEXT("VersionMajor")
  218. typedef enum tagSCRIPTFLAGS
  219. {
  220. SCRIPTFLAGS_CACHEINFO                = 0x00000001L,   // set if the icons need to be created/ removed
  221. SCRIPTFLAGS_SHORTCUTS                = 0x00000004L,   // set if the shortcuts needs to be created/ deleted
  222. SCRIPTFLAGS_MACHINEASSIGN            = 0x00000008L,   // set if product to be assigned to machine
  223. SCRIPTFLAGS_REGDATA_CNFGINFO         = 0x00000020L,   // set if the product cnfg mgmt. registry data needs to be written/ removed
  224. SCRIPTFLAGS_VALIDATE_TRANSFORMS_LIST = 0x00000040L,
  225. #if (_WIN32_MSI >=  110)
  226. SCRIPTFLAGS_REGDATA_CLASSINFO        = 0x00000080L,   // set if COM classes related app info needs to be  created/ deleted
  227. SCRIPTFLAGS_REGDATA_EXTENSIONINFO    = 0x00000100L,   // set if extension related app info needs to be  created/ deleted
  228. SCRIPTFLAGS_REGDATA_APPINFO          = SCRIPTFLAGS_REGDATA_CLASSINFO | SCRIPTFLAGS_REGDATA_EXTENSIONINFO,  // for source level backward compatibility
  229. #else //_WIN32_MSI == 100
  230. SCRIPTFLAGS_REGDATA_APPINFO          = 0x00000010L,
  231. #endif //(_WIN32_MSI >=  110)
  232. SCRIPTFLAGS_REGDATA                  = SCRIPTFLAGS_REGDATA_APPINFO | SCRIPTFLAGS_REGDATA_CNFGINFO, // for source level backward compatibility
  233. }SCRIPTFLAGS;
  234. typedef enum tagADVERTISEFLAGS
  235. {
  236. ADVERTISEFLAGS_MACHINEASSIGN   =    0,   // set if the product is to be machine assigned
  237. ADVERTISEFLAGS_USERASSIGN      =    1,   // set if the product is to be user assigned
  238. }ADVERTISEFLAGS;
  239. typedef enum tagINSTALLTYPE
  240. {
  241. INSTALLTYPE_DEFAULT            =    0,   // set to indicate default behavior
  242. INSTALLTYPE_NETWORK_IMAGE      =    1,   // set to indicate network install
  243. }INSTALLTYPE;
  244. #if (_WIN32_MSI >=  150)
  245. typedef struct _MSIFILEHASHINFO {
  246. ULONG dwFileHashInfoSize;
  247. ULONG dwData [ 4 ];
  248. } MSIFILEHASHINFO, *PMSIFILEHASHINFO;
  249. typedef enum tagMSIARCHITECTUREFLAGS
  250. {
  251. MSIARCHITECTUREFLAGS_X86   = 0x00000001L, // set if creating the script for i386 platform
  252. MSIARCHITECTUREFLAGS_IA64  = 0x00000002L, // set if creating the script for IA64 platform
  253. }MSIARCHITECTUREFLAGS;
  254. typedef enum tagMSIOPENPACKAGEFLAGS
  255. {
  256. MSIOPENPACKAGEFLAGS_IGNOREMACHINESTATE = 0x00000001L, // ignore the machine state when creating the engine
  257. }MSIOPENPACKAGEFLAGS;
  258. #endif //(_WIN32_MSI >=  150)
  259. #ifdef __cplusplus
  260. extern "C" {
  261. #endif
  262. // --------------------------------------------------------------------------
  263. // Functions to set the UI handling and logging. The UI will be used for error,
  264. // progress, and log messages for all subsequent calls to Installer Service
  265. // API functions that require UI.
  266. // --------------------------------------------------------------------------
  267. // Enable internal UI
  268. INSTALLUILEVEL WINAPI MsiSetInternalUI(
  269. INSTALLUILEVEL  dwUILevel,     // UI level
  270. HWND  *phWnd);                   // handle of owner window
  271. // Enable external UI handling, returns any previous handler or NULL if none.
  272. // Messages are designated with a combination of bits from INSTALLLOGMODE enum.
  273. INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(
  274. INSTALLUI_HANDLERA puiHandler,   // for progress and error handling 
  275. DWORD              dwMessageFilter, // bit flags designating messages to handle
  276. LPVOID             pvContext);   // application context
  277. INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(
  278. INSTALLUI_HANDLERW puiHandler,   // for progress and error handling 
  279. DWORD              dwMessageFilter, // bit flags designating messages to handle
  280. LPVOID             pvContext);   // application context
  281. #ifdef UNICODE
  282. #define MsiSetExternalUI  MsiSetExternalUIW
  283. #else
  284. #define MsiSetExternalUI  MsiSetExternalUIA
  285. #endif // !UNICODE
  286. // Enable logging to a file for all install sessions for the client process,
  287. // with control over which log messages are passed to the specified log file.
  288. // Messages are designated with a combination of bits from INSTALLLOGMODE enum.
  289. UINT WINAPI MsiEnableLogA(
  290. DWORD     dwLogMode,           // bit flags designating operations to report
  291. LPCSTR  szLogFile,           // log file, or NULL to disable logging
  292. DWORD     dwLogAttributes);    // INSTALLLOGATTRIBUTES flags
  293. UINT WINAPI MsiEnableLogW(
  294. DWORD     dwLogMode,           // bit flags designating operations to report
  295. LPCWSTR  szLogFile,           // log file, or NULL to disable logging
  296. DWORD     dwLogAttributes);    // INSTALLLOGATTRIBUTES flags
  297. #ifdef UNICODE
  298. #define MsiEnableLog  MsiEnableLogW
  299. #else
  300. #define MsiEnableLog  MsiEnableLogA
  301. #endif // !UNICODE
  302. // --------------------------------------------------------------------------
  303. // Functions to query and configure a product as a whole.
  304. // --------------------------------------------------------------------------
  305. // Return the installed state for a product
  306. INSTALLSTATE WINAPI MsiQueryProductStateA(
  307. LPCSTR  szProduct);
  308. INSTALLSTATE WINAPI MsiQueryProductStateW(
  309. LPCWSTR  szProduct);
  310. #ifdef UNICODE
  311. #define MsiQueryProductState  MsiQueryProductStateW
  312. #else
  313. #define MsiQueryProductState  MsiQueryProductStateA
  314. #endif // !UNICODE
  315. // Return product info
  316. UINT WINAPI MsiGetProductInfoA(
  317. LPCSTR   szProduct,      // product code
  318. LPCSTR   szAttribute,    // attribute name, case-sensitive
  319. LPSTR    lpValueBuf,     // returned value, NULL if not desired
  320. DWORD      *pcchValueBuf); // in/out buffer character count
  321. UINT WINAPI MsiGetProductInfoW(
  322. LPCWSTR   szProduct,      // product code
  323. LPCWSTR   szAttribute,    // attribute name, case-sensitive
  324. LPWSTR    lpValueBuf,     // returned value, NULL if not desired
  325. DWORD      *pcchValueBuf); // in/out buffer character count
  326. #ifdef UNICODE
  327. #define MsiGetProductInfo  MsiGetProductInfoW
  328. #else
  329. #define MsiGetProductInfo  MsiGetProductInfoA
  330. #endif // !UNICODE
  331. // Install a new product.
  332. // Either may be NULL, but the DATABASE property must be specfied
  333. UINT WINAPI MsiInstallProductA(
  334. LPCSTR      szPackagePath,    // location of package to install
  335. LPCSTR      szCommandLine);   // command line <property settings>
  336. UINT WINAPI MsiInstallProductW(
  337. LPCWSTR      szPackagePath,    // location of package to install
  338. LPCWSTR      szCommandLine);   // command line <property settings>
  339. #ifdef UNICODE
  340. #define MsiInstallProduct  MsiInstallProductW
  341. #else
  342. #define MsiInstallProduct  MsiInstallProductA
  343. #endif // !UNICODE
  344. // Install/uninstall an advertised or installed product
  345. // No action if installed and INSTALLSTATE_DEFAULT specified
  346. UINT WINAPI MsiConfigureProductA(
  347. LPCSTR      szProduct,        // product code
  348. int          iInstallLevel,    // how much of the product to install
  349. INSTALLSTATE eInstallState);   // local/source/default/absent/lock/uncache
  350. UINT WINAPI MsiConfigureProductW(
  351. LPCWSTR      szProduct,        // product code
  352. int          iInstallLevel,    // how much of the product to install
  353. INSTALLSTATE eInstallState);   // local/source/default/absent/lock/uncache
  354. #ifdef UNICODE
  355. #define MsiConfigureProduct  MsiConfigureProductW
  356. #else
  357. #define MsiConfigureProduct  MsiConfigureProductA
  358. #endif // !UNICODE
  359. // Install/uninstall an advertised or installed product
  360. // No action if installed and INSTALLSTATE_DEFAULT specified
  361. UINT WINAPI MsiConfigureProductExA(
  362. LPCSTR      szProduct,        // product code
  363. int          iInstallLevel,    // how much of the product to install
  364. INSTALLSTATE eInstallState,    // local/source/default/absent/lock/uncache
  365. LPCSTR      szCommandLine);   // command line <property settings>
  366. UINT WINAPI MsiConfigureProductExW(
  367. LPCWSTR      szProduct,        // product code
  368. int          iInstallLevel,    // how much of the product to install
  369. INSTALLSTATE eInstallState,    // local/source/default/absent/lock/uncache
  370. LPCWSTR      szCommandLine);   // command line <property settings>
  371. #ifdef UNICODE
  372. #define MsiConfigureProductEx  MsiConfigureProductExW
  373. #else
  374. #define MsiConfigureProductEx  MsiConfigureProductExA
  375. #endif // !UNICODE
  376. // Reinstall product, used to validate or correct problems
  377. UINT WINAPI MsiReinstallProductA(
  378. LPCSTR      szProduct,        // product code
  379. DWORD         szReinstallMode); // one or more REINSTALLMODE modes
  380. UINT WINAPI MsiReinstallProductW(
  381. LPCWSTR      szProduct,        // product code
  382. DWORD         szReinstallMode); // one or more REINSTALLMODE modes
  383. #ifdef UNICODE
  384. #define MsiReinstallProduct  MsiReinstallProductW
  385. #else
  386. #define MsiReinstallProduct  MsiReinstallProductA
  387. #endif // !UNICODE
  388. #if (_WIN32_MSI >=  150)
  389. // Output reg and shortcut info to script file for specified architecture for Assign or Publish
  390. // If dwPlatform is 0, then the script is created based on the current platform (behavior of MsiAdvertiseProduct)
  391. // If dwPlatform specifies a platform, then the script is created as if the current platform is the
  392. //    platform specified in dwPlatform 
  393. UINT WINAPI MsiAdvertiseProductExA(
  394. LPCSTR szPackagePath,      // location of package
  395. LPCSTR    szScriptfilePath,   // if NULL, product is locally advertised
  396. LPCSTR    szTransforms,       // list of transforms to be applied
  397. LANGID      lgidLanguage,       // install language
  398. DWORD       dwPlatform,         // the MSIARCHITECTUREFLAGS that control for which platform
  399.                                 //   to create the script, ignored if szScriptfilePath is NULL
  400. DWORD       dwReserved);        // reserved for future use -- must be 0
  401. UINT WINAPI MsiAdvertiseProductExW(
  402. LPCWSTR szPackagePath,      // location of package
  403. LPCWSTR    szScriptfilePath,   // if NULL, product is locally advertised
  404. LPCWSTR    szTransforms,       // list of transforms to be applied
  405. LANGID      lgidLanguage,       // install language
  406. DWORD       dwPlatform,         // the MSIARCHITECTUREFLAGS that control for which platform
  407.                                 //   to create the script, ignored if szScriptfilePath is NULL
  408. DWORD       dwReserved);        // reserved for future use -- must be 0
  409. #ifdef UNICODE
  410. #define MsiAdvertiseProductEx  MsiAdvertiseProductExW
  411. #else
  412. #define MsiAdvertiseProductEx  MsiAdvertiseProductExA
  413. #endif // !UNICODE
  414. #endif // (_WIN32_MSI >= 150)
  415. // Output reg and shortcut info to script file for Assign or Publish
  416. UINT WINAPI MsiAdvertiseProductA(
  417. LPCSTR      szPackagePath,    // location of package
  418. LPCSTR      szScriptfilePath,  // if NULL, product is locally advertised
  419. LPCSTR      szTransforms,      // list of transforms to be applied
  420. LANGID        lgidLanguage);     // install language
  421. UINT WINAPI MsiAdvertiseProductW(
  422. LPCWSTR      szPackagePath,    // location of package
  423. LPCWSTR      szScriptfilePath,  // if NULL, product is locally advertised
  424. LPCWSTR      szTransforms,      // list of transforms to be applied
  425. LANGID        lgidLanguage);     // install language
  426. #ifdef UNICODE
  427. #define MsiAdvertiseProduct  MsiAdvertiseProductW
  428. #else
  429. #define MsiAdvertiseProduct  MsiAdvertiseProductA
  430. #endif // !UNICODE
  431. #if (_WIN32_MSI >=  150)
  432. // Process advertise script file into supplied locations
  433. // If an icon folder is specified, icon files will be placed there
  434. // If an registry key is specified, registry data will be mapped under it
  435. // If fShortcuts is TRUE, shortcuts will be created. If a special folder is
  436. //    returned by SHGetSpecialFolderLocation(?), it will hold the shortcuts.
  437. // if fRemoveItems is TRUE, items that are present will be removed
  438. UINT WINAPI MsiProcessAdvertiseScriptA(
  439. LPCSTR      szScriptFile,  // path to script from MsiAdvertiseProduct
  440. LPCSTR      szIconFolder,  // optional path to folder for icon files and transforms
  441. HKEY         hRegData,      // optional parent registry key
  442. BOOL         fShortcuts,    // TRUE if shortcuts output to special folder
  443. BOOL         fRemoveItems); // TRUE if specified items are to be removed
  444. UINT WINAPI MsiProcessAdvertiseScriptW(
  445. LPCWSTR      szScriptFile,  // path to script from MsiAdvertiseProduct
  446. LPCWSTR      szIconFolder,  // optional path to folder for icon files and transforms
  447. HKEY         hRegData,      // optional parent registry key
  448. BOOL         fShortcuts,    // TRUE if shortcuts output to special folder
  449. BOOL         fRemoveItems); // TRUE if specified items are to be removed
  450. #ifdef UNICODE
  451. #define MsiProcessAdvertiseScript  MsiProcessAdvertiseScriptW
  452. #else
  453. #define MsiProcessAdvertiseScript  MsiProcessAdvertiseScriptA
  454. #endif // !UNICODE
  455. #endif // (_WIN32_MSI >= 150)
  456. // Process advertise script file using the supplied dwFlags control flags
  457. // if fRemoveItems is TRUE, items that are present will be removed
  458. UINT WINAPI MsiAdvertiseScriptA(
  459. LPCSTR      szScriptFile,  // path to script from MsiAdvertiseProduct
  460. DWORD         dwFlags,       // the SCRIPTFLAGS bit flags that control the script execution
  461. PHKEY         phRegData,     // optional parent registry key
  462. BOOL          fRemoveItems); // TRUE if specified items are to be removed
  463. UINT WINAPI MsiAdvertiseScriptW(
  464. LPCWSTR      szScriptFile,  // path to script from MsiAdvertiseProduct
  465. DWORD         dwFlags,       // the SCRIPTFLAGS bit flags that control the script execution
  466. PHKEY         phRegData,     // optional parent registry key
  467. BOOL          fRemoveItems); // TRUE if specified items are to be removed
  468. #ifdef UNICODE
  469. #define MsiAdvertiseScript  MsiAdvertiseScriptW
  470. #else
  471. #define MsiAdvertiseScript  MsiAdvertiseScriptA
  472. #endif // !UNICODE
  473. // Return product info from an installer script file:
  474. //   product code, language, version, readable name, path to package
  475. // Returns TRUE is success, FALSE if szScriptFile is not a valid script file
  476. UINT WINAPI MsiGetProductInfoFromScriptA(
  477. LPCSTR  szScriptFile,    // path to installer script file
  478. LPSTR   lpProductBuf39,  // buffer for product code string GUID, 39 chars
  479. LANGID   *plgidLanguage,  // return language Id
  480. DWORD    *pdwVersion,     // return version: Maj:Min:Build <8:8:16>
  481. LPSTR   lpNameBuf,       // buffer to return readable product name
  482. DWORD    *pcchNameBuf,    // in/out name buffer character count
  483. LPSTR   lpPackageBuf,   // buffer for path to product package
  484. DWORD    *pcchPackageBuf);// in/out path buffer character count
  485. UINT WINAPI MsiGetProductInfoFromScriptW(
  486. LPCWSTR  szScriptFile,    // path to installer script file
  487. LPWSTR   lpProductBuf39,  // buffer for product code string GUID, 39 chars
  488. LANGID   *plgidLanguage,  // return language Id
  489. DWORD    *pdwVersion,     // return version: Maj:Min:Build <8:8:16>
  490. LPWSTR   lpNameBuf,       // buffer to return readable product name
  491. DWORD    *pcchNameBuf,    // in/out name buffer character count
  492. LPWSTR   lpPackageBuf,   // buffer for path to product package
  493. DWORD    *pcchPackageBuf);// in/out path buffer character count
  494. #ifdef UNICODE
  495. #define MsiGetProductInfoFromScript  MsiGetProductInfoFromScriptW
  496. #else
  497. #define MsiGetProductInfoFromScript  MsiGetProductInfoFromScriptA
  498. #endif // !UNICODE
  499. // Return the product code for a registered component, called once by apps
  500. UINT WINAPI MsiGetProductCodeA(
  501. LPCSTR   szComponent,   // component Id registered for this product
  502. LPSTR    lpBuf39);      // returned string GUID, sized for 39 characters
  503. UINT WINAPI MsiGetProductCodeW(
  504. LPCWSTR   szComponent,   // component Id registered for this product
  505. LPWSTR    lpBuf39);      // returned string GUID, sized for 39 characters
  506. #ifdef UNICODE
  507. #define MsiGetProductCode  MsiGetProductCodeW
  508. #else
  509. #define MsiGetProductCode  MsiGetProductCodeA
  510. #endif // !UNICODE
  511. // Return the registered user information for an installed product
  512. USERINFOSTATE WINAPI MsiGetUserInfoA(
  513. LPCSTR  szProduct,        // product code, string GUID
  514. LPSTR   lpUserNameBuf,    // return user name           
  515. DWORD    *pcchUserNameBuf, // in/out buffer character count
  516. LPSTR   lpOrgNameBuf,     // return company name           
  517. DWORD    *pcchOrgNameBuf,  // in/out buffer character count
  518. LPSTR   lpSerialBuf,      // return product serial number
  519. DWORD    *pcchSerialBuf);  // in/out buffer character count
  520. USERINFOSTATE WINAPI MsiGetUserInfoW(
  521. LPCWSTR  szProduct,        // product code, string GUID
  522. LPWSTR   lpUserNameBuf,    // return user name           
  523. DWORD    *pcchUserNameBuf, // in/out buffer character count
  524. LPWSTR   lpOrgNameBuf,     // return company name           
  525. DWORD    *pcchOrgNameBuf,  // in/out buffer character count
  526. LPWSTR   lpSerialBuf,      // return product serial number
  527. DWORD    *pcchSerialBuf);  // in/out buffer character count
  528. #ifdef UNICODE
  529. #define MsiGetUserInfo  MsiGetUserInfoW
  530. #else
  531. #define MsiGetUserInfo  MsiGetUserInfoA
  532. #endif // !UNICODE
  533. // Obtain and store user info and PID from installation wizard (first run)
  534. UINT WINAPI MsiCollectUserInfoA(
  535. LPCSTR  szProduct);     // product code, string GUID
  536. UINT WINAPI MsiCollectUserInfoW(
  537. LPCWSTR  szProduct);     // product code, string GUID
  538. #ifdef UNICODE
  539. #define MsiCollectUserInfo  MsiCollectUserInfoW
  540. #else
  541. #define MsiCollectUserInfo  MsiCollectUserInfoA
  542. #endif // !UNICODE
  543. // --------------------------------------------------------------------------
  544. // Functions to patch existing products
  545. // --------------------------------------------------------------------------
  546. // Patch all possible installed products.
  547. UINT WINAPI MsiApplyPatchA(
  548. LPCSTR      szPatchPackage,   // location of patch package
  549. LPCSTR      szInstallPackage, // location of package for install to patch <optional>
  550. INSTALLTYPE   eInstallType,     // type of install to patch
  551. LPCSTR      szCommandLine);   // command line <property settings>
  552. UINT WINAPI MsiApplyPatchW(
  553. LPCWSTR      szPatchPackage,   // location of patch package
  554. LPCWSTR      szInstallPackage, // location of package for install to patch <optional>
  555. INSTALLTYPE   eInstallType,     // type of install to patch
  556. LPCWSTR      szCommandLine);   // command line <property settings>
  557. #ifdef UNICODE
  558. #define MsiApplyPatch  MsiApplyPatchW
  559. #else
  560. #define MsiApplyPatch  MsiApplyPatchA
  561. #endif // !UNICODE
  562. // Return patch info
  563. UINT WINAPI MsiGetPatchInfoA(
  564. LPCSTR   szPatch,        // patch code
  565. LPCSTR   szAttribute,    // attribute name, case-sensitive
  566. LPSTR    lpValueBuf,     // returned value, NULL if not desired
  567. DWORD      *pcchValueBuf); // in/out buffer character count
  568. UINT WINAPI MsiGetPatchInfoW(
  569. LPCWSTR   szPatch,        // patch code
  570. LPCWSTR   szAttribute,    // attribute name, case-sensitive
  571. LPWSTR    lpValueBuf,     // returned value, NULL if not desired
  572. DWORD      *pcchValueBuf); // in/out buffer character count
  573. #ifdef UNICODE
  574. #define MsiGetPatchInfo  MsiGetPatchInfoW
  575. #else
  576. #define MsiGetPatchInfo  MsiGetPatchInfoA
  577. #endif // !UNICODE
  578. // Enumerate all patches for a product
  579. UINT WINAPI MsiEnumPatchesA(
  580. LPCSTR szProduct,
  581. DWORD    iPatchIndex,
  582. LPSTR  lpPatchBuf,
  583. LPSTR  lpTransformsBuf,
  584. DWORD    *pcchTransformsBuf);
  585. UINT WINAPI MsiEnumPatchesW(
  586. LPCWSTR szProduct,
  587. DWORD    iPatchIndex,
  588. LPWSTR  lpPatchBuf,
  589. LPWSTR  lpTransformsBuf,
  590. DWORD    *pcchTransformsBuf);
  591. #ifdef UNICODE
  592. #define MsiEnumPatches  MsiEnumPatchesW
  593. #else
  594. #define MsiEnumPatches  MsiEnumPatchesA
  595. #endif // !UNICODE
  596. // --------------------------------------------------------------------------
  597. // Functions to query and configure a feature within a product.
  598. // --------------------------------------------------------------------------
  599. // Return the installed state for a product feature
  600. INSTALLSTATE WINAPI MsiQueryFeatureStateA(
  601. LPCSTR  szProduct,
  602. LPCSTR  szFeature);
  603. INSTALLSTATE WINAPI MsiQueryFeatureStateW(
  604. LPCWSTR  szProduct,
  605. LPCWSTR  szFeature);
  606. #ifdef UNICODE
  607. #define MsiQueryFeatureState  MsiQueryFeatureStateW
  608. #else
  609. #define MsiQueryFeatureState  MsiQueryFeatureStateA
  610. #endif // !UNICODE
  611. // Indicate intent to use a product feature, increments usage count
  612. // Prompts for CD if not loaded, does not install feature
  613. INSTALLSTATE WINAPI MsiUseFeatureA(
  614. LPCSTR  szProduct,
  615. LPCSTR  szFeature);
  616. INSTALLSTATE WINAPI MsiUseFeatureW(
  617. LPCWSTR  szProduct,
  618. LPCWSTR  szFeature);
  619. #ifdef UNICODE
  620. #define MsiUseFeature  MsiUseFeatureW
  621. #else
  622. #define MsiUseFeature  MsiUseFeatureA
  623. #endif // !UNICODE
  624. // Indicate intent to use a product feature, increments usage count
  625. // Prompts for CD if not loaded, does not install feature
  626. // Allows for bypassing component detection where performance is critical
  627. INSTALLSTATE WINAPI MsiUseFeatureExA(
  628. LPCSTR  szProduct,          // product code
  629. LPCSTR  szFeature,          // feature ID
  630. DWORD     dwInstallMode,      // INSTALLMODE_NODETECTION, else 0
  631. DWORD     dwReserved);        // reserved, must be 0
  632. INSTALLSTATE WINAPI MsiUseFeatureExW(
  633. LPCWSTR  szProduct,          // product code
  634. LPCWSTR  szFeature,          // feature ID
  635. DWORD     dwInstallMode,      // INSTALLMODE_NODETECTION, else 0
  636. DWORD     dwReserved);        // reserved, must be 0
  637. #ifdef UNICODE
  638. #define MsiUseFeatureEx  MsiUseFeatureExW
  639. #else
  640. #define MsiUseFeatureEx  MsiUseFeatureExA
  641. #endif // !UNICODE
  642. // Return the usage metrics for a product feature
  643. UINT WINAPI MsiGetFeatureUsageA(
  644. LPCSTR      szProduct,        // product code
  645. LPCSTR      szFeature,        // feature ID
  646. DWORD        *pdwUseCount,     // returned use count
  647. WORD         *pwDateUsed);     // last date used (DOS date format)
  648. UINT WINAPI MsiGetFeatureUsageW(
  649. LPCWSTR      szProduct,        // product code
  650. LPCWSTR      szFeature,        // feature ID
  651. DWORD        *pdwUseCount,     // returned use count
  652. WORD         *pwDateUsed);     // last date used (DOS date format)
  653. #ifdef UNICODE
  654. #define MsiGetFeatureUsage  MsiGetFeatureUsageW
  655. #else
  656. #define MsiGetFeatureUsage  MsiGetFeatureUsageA
  657. #endif // !UNICODE
  658. // Force the installed state for a product feature
  659. UINT WINAPI MsiConfigureFeatureA(
  660. LPCSTR  szProduct,
  661. LPCSTR  szFeature,
  662. INSTALLSTATE eInstallState);   // local/source/default/absent/lock/uncache
  663. UINT WINAPI MsiConfigureFeatureW(
  664. LPCWSTR  szProduct,
  665. LPCWSTR  szFeature,
  666. INSTALLSTATE eInstallState);   // local/source/default/absent/lock/uncache
  667. #ifdef UNICODE
  668. #define MsiConfigureFeature  MsiConfigureFeatureW
  669. #else
  670. #define MsiConfigureFeature  MsiConfigureFeatureA
  671. #endif // !UNICODE
  672. // Reinstall feature, used to validate or correct problems
  673. UINT WINAPI MsiReinstallFeatureA(
  674. LPCSTR      szProduct,        // product code
  675. LPCSTR      szFeature,        // feature ID, NULL for entire product
  676. DWORD         dwReinstallMode); // one or more REINSTALLMODE modes
  677. UINT WINAPI MsiReinstallFeatureW(
  678. LPCWSTR      szProduct,        // product code
  679. LPCWSTR      szFeature,        // feature ID, NULL for entire product
  680. DWORD         dwReinstallMode); // one or more REINSTALLMODE modes
  681. #ifdef UNICODE
  682. #define MsiReinstallFeature  MsiReinstallFeatureW
  683. #else
  684. #define MsiReinstallFeature  MsiReinstallFeatureA
  685. #endif // !UNICODE
  686. // --------------------------------------------------------------------------
  687. // Functions to return a path to a particular component.
  688. // The state of the feature being used should have been checked previously.
  689. // --------------------------------------------------------------------------
  690. // Return full component path, performing any necessary installation
  691. // calls MsiQueryFeatureState to detect that all components are installed
  692. // then calls MsiConfigureFeature if any of its components are uninstalled
  693. // then calls MsiLocateComponent to obtain the path the its key file
  694. UINT WINAPI MsiProvideComponentA(
  695. LPCSTR     szProduct,    // product code in case install required
  696. LPCSTR     szFeature,    // feature ID in case install required
  697. LPCSTR     szComponent,  // component ID
  698. DWORD        dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  699. LPSTR      lpPathBuf,    // returned path, NULL if not desired
  700. DWORD       *pcchPathBuf);// in/out buffer character count
  701. UINT WINAPI MsiProvideComponentW(
  702. LPCWSTR     szProduct,    // product code in case install required
  703. LPCWSTR     szFeature,    // feature ID in case install required
  704. LPCWSTR     szComponent,  // component ID
  705. DWORD        dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  706. LPWSTR      lpPathBuf,    // returned path, NULL if not desired
  707. DWORD       *pcchPathBuf);// in/out buffer character count
  708. #ifdef UNICODE
  709. #define MsiProvideComponent  MsiProvideComponentW
  710. #else
  711. #define MsiProvideComponent  MsiProvideComponentA
  712. #endif // !UNICODE
  713. // Return full component path for a qualified component, performing any necessary installation. 
  714. // Prompts for source if necessary and increments the usage count for the feature.
  715. UINT WINAPI MsiProvideQualifiedComponentA(
  716. LPCSTR     szCategory,   // component category ID
  717. LPCSTR     szQualifier,  // specifies which component to access
  718. DWORD        dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  719. LPSTR      lpPathBuf,    // returned path, NULL if not desired
  720. DWORD       *pcchPathBuf); // in/out buffer character count
  721. UINT WINAPI MsiProvideQualifiedComponentW(
  722. LPCWSTR     szCategory,   // component category ID
  723. LPCWSTR     szQualifier,  // specifies which component to access
  724. DWORD        dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  725. LPWSTR      lpPathBuf,    // returned path, NULL if not desired
  726. DWORD       *pcchPathBuf); // in/out buffer character count
  727. #ifdef UNICODE
  728. #define MsiProvideQualifiedComponent  MsiProvideQualifiedComponentW
  729. #else
  730. #define MsiProvideQualifiedComponent  MsiProvideQualifiedComponentA
  731. #endif // !UNICODE
  732. // Return full component path for a qualified component, performing any necessary installation. 
  733. // Prompts for source if necessary and increments the usage count for the feature.
  734. // The szProduct parameter specifies the product to match that has published the qualified
  735. // component. If null, this API works the same as MsiProvideQualifiedComponent. 
  736. UINT WINAPI MsiProvideQualifiedComponentExA(
  737. LPCSTR     szCategory,   // component category ID
  738. LPCSTR     szQualifier,  // specifies which component to access
  739. DWORD        dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  740. LPCSTR     szProduct,    // the product code 
  741. DWORD        dwUnused1,    // not used, must be zero
  742. DWORD        dwUnused2,    // not used, must be zero
  743. LPSTR      lpPathBuf,    // returned path, NULL if not desired
  744. DWORD       *pcchPathBuf); // in/out buffer character count
  745. UINT WINAPI MsiProvideQualifiedComponentExW(
  746. LPCWSTR     szCategory,   // component category ID
  747. LPCWSTR     szQualifier,  // specifies which component to access
  748. DWORD        dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  749. LPCWSTR     szProduct,    // the product code 
  750. DWORD        dwUnused1,    // not used, must be zero
  751. DWORD        dwUnused2,    // not used, must be zero
  752. LPWSTR      lpPathBuf,    // returned path, NULL if not desired
  753. DWORD       *pcchPathBuf); // in/out buffer character count
  754. #ifdef UNICODE
  755. #define MsiProvideQualifiedComponentEx  MsiProvideQualifiedComponentExW
  756. #else
  757. #define MsiProvideQualifiedComponentEx  MsiProvideQualifiedComponentExA
  758. #endif // !UNICODE
  759. // Return full path to an installed component
  760. INSTALLSTATE WINAPI MsiGetComponentPathA(
  761. LPCSTR   szProduct,   // product code for client product
  762. LPCSTR   szComponent, // component Id, string GUID
  763. LPSTR    lpPathBuf,   // returned path
  764. DWORD     *pcchBuf);    // in/out buffer character count
  765. INSTALLSTATE WINAPI MsiGetComponentPathW(
  766. LPCWSTR   szProduct,   // product code for client product
  767. LPCWSTR   szComponent, // component Id, string GUID
  768. LPWSTR    lpPathBuf,   // returned path
  769. DWORD     *pcchBuf);    // in/out buffer character count
  770. #ifdef UNICODE
  771. #define MsiGetComponentPath  MsiGetComponentPathW
  772. #else
  773. #define MsiGetComponentPath  MsiGetComponentPathA
  774. #endif // !UNICODE
  775. #if (_WIN32_MSI >= 150)
  776. #define MSIASSEMBLYINFO_NETASSEMBLY   0 // Net assemblies
  777. #define MSIASSEMBLYINFO_WIN32ASSEMBLY 1 // Win32 assemblies
  778. // Return full component path for an assembly installed via the WI, performing any necessary installation. 
  779. // Prompts for source if necessary and increments the usage count for the feature.
  780. // The szAssemblyName parameter specifies the stringized assembly name. 
  781. // The szAppContext is the full path to the .cfg file or the app exe to which the assembly being requested 
  782. // has been privatised to, which is null for global assemblies
  783. UINT WINAPI MsiProvideAssemblyA(
  784. LPCSTR    szAssemblyName,   // stringized assembly name
  785. LPCSTR    szAppContext,  // specifies the full path to the parent asm's .cfg file, null for global assemblies
  786. DWORD       dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  787. DWORD       dwAssemblyInfo,  // assembly info, including assembly type
  788. LPSTR     lpPathBuf,    // returned path, NULL if not desired
  789. DWORD       *pcchPathBuf); // in/out buffer character count
  790. UINT WINAPI MsiProvideAssemblyW(
  791. LPCWSTR    szAssemblyName,   // stringized assembly name
  792. LPCWSTR    szAppContext,  // specifies the full path to the parent asm's .cfg file, null for global assemblies
  793. DWORD       dwInstallMode,// either of type INSTALLMODE or a combination of the REINSTALLMODE flags
  794. DWORD       dwAssemblyInfo,  // assembly info, including assembly type
  795. LPWSTR     lpPathBuf,    // returned path, NULL if not desired
  796. DWORD       *pcchPathBuf); // in/out buffer character count
  797. #ifdef UNICODE
  798. #define MsiProvideAssembly  MsiProvideAssemblyW
  799. #else
  800. #define MsiProvideAssembly  MsiProvideAssemblyA
  801. #endif // !UNICODE
  802. #endif //(_WIN32_MSI >=  150)
  803. // --------------------------------------------------------------------------
  804. // Functions to iterate registered products, features, and components.
  805. // As with reg keys, they accept a 0-based index into the enumeration.
  806. // --------------------------------------------------------------------------
  807. // Enumerate the registered products, either installed or advertised
  808. UINT WINAPI MsiEnumProductsA(
  809. DWORD     iProductIndex,    // 0-based index into registered products
  810. LPSTR   lpProductBuf);    // buffer of char count: 39 (size of string GUID)
  811. UINT WINAPI MsiEnumProductsW(
  812. DWORD     iProductIndex,    // 0-based index into registered products
  813. LPWSTR   lpProductBuf);    // buffer of char count: 39 (size of string GUID)
  814. #ifdef UNICODE
  815. #define MsiEnumProducts  MsiEnumProductsW
  816. #else
  817. #define MsiEnumProducts  MsiEnumProductsA
  818. #endif // !UNICODE
  819. #if (_WIN32_MSI >=  110)
  820. // Enumerate products with given upgrade code
  821. UINT WINAPI MsiEnumRelatedProductsA(
  822. LPCSTR  lpUpgradeCode,    // upgrade code of products to enumerate
  823. DWORD     dwReserved,       // reserved, must be 0
  824. DWORD     iProductIndex,    // 0-based index into registered products
  825. LPSTR   lpProductBuf);    // buffer of char count: 39 (size of string GUID)
  826. UINT WINAPI MsiEnumRelatedProductsW(
  827. LPCWSTR  lpUpgradeCode,    // upgrade code of products to enumerate
  828. DWORD     dwReserved,       // reserved, must be 0
  829. DWORD     iProductIndex,    // 0-based index into registered products
  830. LPWSTR   lpProductBuf);    // buffer of char count: 39 (size of string GUID)
  831. #ifdef UNICODE
  832. #define MsiEnumRelatedProducts  MsiEnumRelatedProductsW
  833. #else
  834. #define MsiEnumRelatedProducts  MsiEnumRelatedProductsA
  835. #endif // !UNICODE
  836. #endif //(_WIN32_MSI >=  110)
  837. // Enumerate the advertised features for a given product.
  838. // If parent is not required, supplying NULL will improve performance.
  839. UINT WINAPI MsiEnumFeaturesA(
  840. LPCSTR  szProduct,
  841. DWORD     iFeatureIndex,  // 0-based index into published features
  842. LPSTR   lpFeatureBuf,   // feature name buffer,   size=MAX_FEATURE_CHARS+1
  843. LPSTR   lpParentBuf);   // parent feature buffer, size=MAX_FEATURE_CHARS+1
  844. UINT WINAPI MsiEnumFeaturesW(
  845. LPCWSTR  szProduct,
  846. DWORD     iFeatureIndex,  // 0-based index into published features
  847. LPWSTR   lpFeatureBuf,   // feature name buffer,   size=MAX_FEATURE_CHARS+1
  848. LPWSTR   lpParentBuf);   // parent feature buffer, size=MAX_FEATURE_CHARS+1
  849. #ifdef UNICODE
  850. #define MsiEnumFeatures  MsiEnumFeaturesW
  851. #else
  852. #define MsiEnumFeatures  MsiEnumFeaturesA
  853. #endif // !UNICODE
  854. // Enumerate the installed components for all products
  855. UINT WINAPI MsiEnumComponentsA(
  856. DWORD    iComponentIndex,  // 0-based index into installed components
  857. LPSTR   lpComponentBuf);  // buffer of char count: 39 (size of string GUID)
  858. UINT WINAPI MsiEnumComponentsW(
  859. DWORD    iComponentIndex,  // 0-based index into installed components
  860. LPWSTR   lpComponentBuf);  // buffer of char count: 39 (size of string GUID)
  861. #ifdef UNICODE
  862. #define MsiEnumComponents  MsiEnumComponentsW
  863. #else
  864. #define MsiEnumComponents  MsiEnumComponentsA
  865. #endif // !UNICODE
  866. // Enumerate the client products for a component
  867. UINT WINAPI MsiEnumClientsA(
  868. LPCSTR  szComponent,
  869. DWORD     iProductIndex,    // 0-based index into client products
  870. LPSTR   lpProductBuf);    // buffer of char count: 39 (size of string GUID)
  871. UINT WINAPI MsiEnumClientsW(
  872. LPCWSTR  szComponent,
  873. DWORD     iProductIndex,    // 0-based index into client products
  874. LPWSTR   lpProductBuf);    // buffer of char count: 39 (size of string GUID)
  875. #ifdef UNICODE
  876. #define MsiEnumClients  MsiEnumClientsW
  877. #else
  878. #define MsiEnumClients  MsiEnumClientsA
  879. #endif // !UNICODE
  880. // Enumerate the qualifiers for an advertised component.
  881. UINT WINAPI MsiEnumComponentQualifiersA(
  882. LPCSTR   szComponent,         // generic component ID that is qualified
  883. DWORD     iIndex,            // 0-based index into qualifiers
  884. LPSTR    lpQualifierBuf,      // qualifier buffer
  885. DWORD     *pcchQualifierBuf,   // in/out qualifier buffer character count
  886. LPSTR    lpApplicationDataBuf,    // description buffer
  887. DWORD     *pcchApplicationDataBuf); // in/out description buffer character count
  888. UINT WINAPI MsiEnumComponentQualifiersW(
  889. LPCWSTR   szComponent,         // generic component ID that is qualified
  890. DWORD     iIndex,            // 0-based index into qualifiers
  891. LPWSTR    lpQualifierBuf,      // qualifier buffer
  892. DWORD     *pcchQualifierBuf,   // in/out qualifier buffer character count
  893. LPWSTR    lpApplicationDataBuf,    // description buffer
  894. DWORD     *pcchApplicationDataBuf); // in/out description buffer character count
  895. #ifdef UNICODE
  896. #define MsiEnumComponentQualifiers  MsiEnumComponentQualifiersW
  897. #else
  898. #define MsiEnumComponentQualifiers  MsiEnumComponentQualifiersA
  899. #endif // !UNICODE
  900. // --------------------------------------------------------------------------
  901. // Functions to obtain product or package information.
  902. // --------------------------------------------------------------------------
  903. // Open the installation for a product to obtain detailed information
  904. UINT WINAPI MsiOpenProductA(
  905. LPCSTR   szProduct,    // product code
  906. MSIHANDLE  *hProduct);   // returned product handle, must be closed
  907. UINT WINAPI MsiOpenProductW(
  908. LPCWSTR   szProduct,    // product code
  909. MSIHANDLE  *hProduct);   // returned product handle, must be closed
  910. #ifdef UNICODE
  911. #define MsiOpenProduct  MsiOpenProductW
  912. #else
  913. #define MsiOpenProduct  MsiOpenProductA
  914. #endif // !UNICODE
  915. // Open a product package in order to access product properties
  916. UINT WINAPI MsiOpenPackageA(
  917. LPCSTR    szPackagePath,     // path to package, or database handle: #nnnn
  918. MSIHANDLE  *hProduct);         // returned product handle, must be closed
  919. UINT WINAPI MsiOpenPackageW(
  920. LPCWSTR    szPackagePath,     // path to package, or database handle: #nnnn
  921. MSIHANDLE  *hProduct);         // returned product handle, must be closed
  922. #ifdef UNICODE
  923. #define MsiOpenPackage  MsiOpenPackageW
  924. #else
  925. #define MsiOpenPackage  MsiOpenPackageA
  926. #endif // !UNICODE
  927. #if (_WIN32_MSI >=  150)
  928. // Open a product package in order to access product properties
  929. // Option to create a "safe" engine that does not look at machine state
  930. //  and does not allow for modification of machine state
  931. UINT WINAPI MsiOpenPackageExA(
  932. LPCSTR   szPackagePath, // path to package, or database handle: #nnnn
  933. DWORD      dwOptions,     // options flags to indicate whether or not to ignore machine state
  934. MSIHANDLE *hProduct);     // returned product handle, must be closed
  935. UINT WINAPI MsiOpenPackageExW(
  936. LPCWSTR   szPackagePath, // path to package, or database handle: #nnnn
  937. DWORD      dwOptions,     // options flags to indicate whether or not to ignore machine state
  938. MSIHANDLE *hProduct);     // returned product handle, must be closed
  939. #ifdef UNICODE
  940. #define MsiOpenPackageEx  MsiOpenPackageExW
  941. #else
  942. #define MsiOpenPackageEx  MsiOpenPackageExA
  943. #endif // !UNICODE
  944. #endif //(_WIN32_MSI >= 150)
  945. // Provide the value for an installation property.
  946. UINT WINAPI MsiGetProductPropertyA(
  947. MSIHANDLE   hProduct,       // product handle obtained from MsiOpenProduct
  948. LPCSTR    szProperty,     // property name, case-sensitive
  949. LPSTR     lpValueBuf,     // returned value, NULL if not desired
  950. DWORD      *pcchValueBuf); // in/out buffer character count
  951. UINT WINAPI MsiGetProductPropertyW(
  952. MSIHANDLE   hProduct,       // product handle obtained from MsiOpenProduct
  953. LPCWSTR    szProperty,     // property name, case-sensitive
  954. LPWSTR     lpValueBuf,     // returned value, NULL if not desired
  955. DWORD      *pcchValueBuf); // in/out buffer character count
  956. #ifdef UNICODE
  957. #define MsiGetProductProperty  MsiGetProductPropertyW
  958. #else
  959. #define MsiGetProductProperty  MsiGetProductPropertyA
  960. #endif // !UNICODE
  961. // Determine whether a file is a package
  962. // Returns ERROR_SUCCESS if file is a package.
  963. UINT WINAPI MsiVerifyPackageA(
  964. LPCSTR      szPackagePath);   // location of package
  965. UINT WINAPI MsiVerifyPackageW(
  966. LPCWSTR      szPackagePath);   // location of package
  967. #ifdef UNICODE
  968. #define MsiVerifyPackage  MsiVerifyPackageW
  969. #else
  970. #define MsiVerifyPackage  MsiVerifyPackageA
  971. #endif // !UNICODE
  972. // Provide descriptive information for product feature: title and description.
  973. // Returns the install level for the feature, or -1 if feature is unknown.
  974. //   0 = feature is not available on this machine
  975. //   1 = highest priority, feature installed if parent is installed
  976. //  >1 = decreasing priority, feature installation based on InstallLevel property
  977. UINT WINAPI MsiGetFeatureInfoA(
  978. MSIHANDLE   hProduct,       // product handle obtained from MsiOpenProduct
  979. LPCSTR    szFeature,      // feature name
  980. DWORD      *lpAttributes,  // attribute flags for the feature, using INSTALLFEATUREATTRIBUTE
  981. LPSTR     lpTitleBuf,     // returned localized name, NULL if not desired
  982. DWORD      *pcchTitleBuf,  // in/out buffer character count
  983. LPSTR     lpHelpBuf,      // returned description, NULL if not desired
  984. DWORD      *pcchHelpBuf);  // in/out buffer character count
  985. UINT WINAPI MsiGetFeatureInfoW(
  986. MSIHANDLE   hProduct,       // product handle obtained from MsiOpenProduct
  987. LPCWSTR    szFeature,      // feature name
  988. DWORD      *lpAttributes,  // attribute flags for the feature, using INSTALLFEATUREATTRIBUTE
  989. LPWSTR     lpTitleBuf,     // returned localized name, NULL if not desired
  990. DWORD      *pcchTitleBuf,  // in/out buffer character count
  991. LPWSTR     lpHelpBuf,      // returned description, NULL if not desired
  992. DWORD      *pcchHelpBuf);  // in/out buffer character count
  993. #ifdef UNICODE
  994. #define MsiGetFeatureInfo  MsiGetFeatureInfoW
  995. #else
  996. #define MsiGetFeatureInfo  MsiGetFeatureInfoA
  997. #endif // !UNICODE
  998. // --------------------------------------------------------------------------
  999. // Functions to access or install missing components and files.
  1000. // These should be used as a last resort.
  1001. // --------------------------------------------------------------------------
  1002. // Install a component unexpectedly missing, provided only for error recovery
  1003. // This would typically occur due to failue to establish feature availability
  1004. // The product feature having the smallest incremental cost is installed
  1005. UINT WINAPI MsiInstallMissingComponentA(
  1006. LPCSTR      szProduct,        // product code
  1007. LPCSTR      szComponent,      // component Id, string GUID
  1008. INSTALLSTATE eInstallState);  // local/source/default, absent invalid
  1009. UINT WINAPI MsiInstallMissingComponentW(
  1010. LPCWSTR      szProduct,        // product code
  1011. LPCWSTR      szComponent,      // component Id, string GUID
  1012. INSTALLSTATE eInstallState);  // local/source/default, absent invalid
  1013. #ifdef UNICODE
  1014. #define MsiInstallMissingComponent  MsiInstallMissingComponentW
  1015. #else
  1016. #define MsiInstallMissingComponent  MsiInstallMissingComponentA
  1017. #endif // !UNICODE
  1018. // Install a file unexpectedly missing, provided only for error recovery
  1019. // This would typically occur due to failue to establish feature availability
  1020. // The missing component is determined from the product's File table, then
  1021. // the product feature having the smallest incremental cost is installed
  1022. UINT WINAPI MsiInstallMissingFileA(
  1023. LPCSTR      szProduct,        // product code
  1024. LPCSTR      szFile);          // file name, without path
  1025. UINT WINAPI MsiInstallMissingFileW(
  1026. LPCWSTR      szProduct,        // product code
  1027. LPCWSTR      szFile);          // file name, without path
  1028. #ifdef UNICODE
  1029. #define MsiInstallMissingFile  MsiInstallMissingFileW
  1030. #else
  1031. #define MsiInstallMissingFile  MsiInstallMissingFileA
  1032. #endif // !UNICODE
  1033. // Return full path to an installed component without a product code
  1034. // This function attempts to determine the product using MsiGetProductCode
  1035. // but is not guaranteed to find the correct product for the caller.
  1036. // MsiGetComponentPath should always be called when possible.
  1037. INSTALLSTATE WINAPI MsiLocateComponentA(
  1038. LPCSTR szComponent,  // component Id, string GUID
  1039. LPSTR  lpPathBuf,    // returned path
  1040. DWORD   *pcchBuf);    // in/out buffer character count
  1041. INSTALLSTATE WINAPI MsiLocateComponentW(
  1042. LPCWSTR szComponent,  // component Id, string GUID
  1043. LPWSTR  lpPathBuf,    // returned path
  1044. DWORD   *pcchBuf);    // in/out buffer character count
  1045. #ifdef UNICODE
  1046. #define MsiLocateComponent  MsiLocateComponentW
  1047. #else
  1048. #define MsiLocateComponent  MsiLocateComponentA
  1049. #endif // !UNICODE
  1050. #if (_WIN32_MSI >=  110)
  1051. // --------------------------------------------------------------------------
  1052. // Functions used to manage the list of valid sources.
  1053. // --------------------------------------------------------------------------
  1054. // Opens the list of sources for the specified user's install of the product
  1055. // and removes all network sources from the list. A NULL or empty value for
  1056. // the user name indicates the per-machine install.
  1057. UINT WINAPI MsiSourceListClearAllA(
  1058. LPCSTR szProduct,          // product code
  1059. LPCSTR szUserName,         // user name or NULL/empty for per-machine
  1060. DWORD    dwReserved);        // reserved - must be 0
  1061. UINT WINAPI MsiSourceListClearAllW(
  1062. LPCWSTR szProduct,          // product code
  1063. LPCWSTR szUserName,         // user name or NULL/empty for per-machine
  1064. DWORD    dwReserved);        // reserved - must be 0
  1065. #ifdef UNICODE
  1066. #define MsiSourceListClearAll  MsiSourceListClearAllW
  1067. #else
  1068. #define MsiSourceListClearAll  MsiSourceListClearAllA
  1069. #endif // !UNICODE
  1070. // Opens the list of sources for the specified user's install of the product
  1071. // and adds the provided source as a new network source. A NULL or empty 
  1072. // value for the user name indicates the per-machine install.
  1073. UINT WINAPI MsiSourceListAddSourceA(
  1074. LPCSTR szProduct,          // product code
  1075. LPCSTR szUserName,         // user name or NULL/empty for per-machine
  1076. DWORD    dwReserved,         // reserved - must be 0
  1077. LPCSTR szSource);          // new source
  1078. UINT WINAPI MsiSourceListAddSourceW(
  1079. LPCWSTR szProduct,          // product code
  1080. LPCWSTR szUserName,         // user name or NULL/empty for per-machine
  1081. DWORD    dwReserved,         // reserved - must be 0
  1082. LPCWSTR szSource);          // new source
  1083. #ifdef UNICODE
  1084. #define MsiSourceListAddSource  MsiSourceListAddSourceW
  1085. #else
  1086. #define MsiSourceListAddSource  MsiSourceListAddSourceA
  1087. #endif // !UNICODE
  1088. // Forces the installer to reevaluate the list of sources the next time that
  1089. // the specified product needs a source.
  1090. UINT WINAPI MsiSourceListForceResolutionA(
  1091. LPCSTR szProduct,          // product code
  1092. LPCSTR szUserName,         // user name or NULL/empty for per-machine
  1093. DWORD    dwReserved);        // reserved - must be 0
  1094. UINT WINAPI MsiSourceListForceResolutionW(
  1095. LPCWSTR szProduct,          // product code
  1096. LPCWSTR szUserName,         // user name or NULL/empty for per-machine
  1097. DWORD    dwReserved);        // reserved - must be 0
  1098. #ifdef UNICODE
  1099. #define MsiSourceListForceResolution  MsiSourceListForceResolutionW
  1100. #else
  1101. #define MsiSourceListForceResolution  MsiSourceListForceResolutionA
  1102. #endif // !UNICODE
  1103. #endif //(_WIN32_MSI >=  110)
  1104. // --------------------------------------------------------------------------
  1105. // Utility functions
  1106. // --------------------------------------------------------------------------
  1107. // Give the version string and language for a specified file
  1108. UINT WINAPI MsiGetFileVersionA(
  1109. LPCSTR    szFilePath,       // path to the file
  1110. LPSTR     lpVersionBuf,     // returned version string
  1111. DWORD      *pcchVersionBuf,   // in/out buffer byte count
  1112. LPSTR     lpLangBuf,        // returned language string
  1113. DWORD       *pcchLangBuf);    // in/out buffer byte count
  1114. UINT WINAPI MsiGetFileVersionW(
  1115. LPCWSTR    szFilePath,       // path to the file
  1116. LPWSTR     lpVersionBuf,     // returned version string
  1117. DWORD      *pcchVersionBuf,   // in/out buffer byte count
  1118. LPWSTR     lpLangBuf,        // returned language string
  1119. DWORD       *pcchLangBuf);    // in/out buffer byte count
  1120. #ifdef UNICODE
  1121. #define MsiGetFileVersion  MsiGetFileVersionW
  1122. #else
  1123. #define MsiGetFileVersion  MsiGetFileVersionA
  1124. #endif // !UNICODE
  1125. #if (_WIN32_MSI >=  150)
  1126. UINT WINAPI MsiGetFileHashA(
  1127. LPCSTR         szFilePath,  // path to the file
  1128. DWORD            dwOptions,   // options
  1129. PMSIFILEHASHINFO pHash);      // returned file hash info
  1130. UINT WINAPI MsiGetFileHashW(
  1131. LPCWSTR         szFilePath,  // path to the file
  1132. DWORD            dwOptions,   // options
  1133. PMSIFILEHASHINFO pHash);      // returned file hash info
  1134. #ifdef UNICODE
  1135. #define MsiGetFileHash  MsiGetFileHashW
  1136. #else
  1137. #define MsiGetFileHash  MsiGetFileHashA
  1138. #endif // !UNICODE
  1139. #endif //(_WIN32_MSI >=  150)
  1140. #if (_WIN32_MSI >= 150)
  1141. #ifndef _MSI_NO_CRYPTO
  1142. HRESULT WINAPI MsiGetFileSignatureInformationA(
  1143. LPCSTR  szSignedObjectPath, // path to the signed object
  1144. DWORD            dwFlags,            // special extra error case flags
  1145. PCCERT_CONTEXT  *ppcCertContext,     // returned signer cert context
  1146. BYTE            *pbHashData,         // returned hash buffer, NULL if not desired
  1147. DWORD           *pcbHashData);       // in/out buffer byte count
  1148. HRESULT WINAPI MsiGetFileSignatureInformationW(
  1149. LPCWSTR  szSignedObjectPath, // path to the signed object
  1150. DWORD            dwFlags,            // special extra error case flags
  1151. PCCERT_CONTEXT  *ppcCertContext,     // returned signer cert context
  1152. BYTE            *pbHashData,         // returned hash buffer, NULL if not desired
  1153. DWORD           *pcbHashData);       // in/out buffer byte count
  1154. #ifdef UNICODE
  1155. #define MsiGetFileSignatureInformation  MsiGetFileSignatureInformationW
  1156. #else
  1157. #define MsiGetFileSignatureInformation  MsiGetFileSignatureInformationA
  1158. #endif // !UNICODE
  1159. // By default, when only requesting the certificate context, an invalid hash
  1160. // in the digital signature is not a fatal error.  Set this flag in the dwFlags
  1161. // parameter to make the TRUST_E_BAD_DIGEST error fatal.
  1162. #define MSI_INVALID_HASH_IS_FATAL 0x1
  1163. #endif// _MSI_NO_CRYPTO
  1164. #endif //(_WIN32_MSI >= 150)
  1165. #if (_WIN32_MSI >=  110)
  1166. // examine a shortcut, and retrieve its descriptor information 
  1167. // if available.
  1168. UINT WINAPI MsiGetShortcutTargetA(
  1169. LPCSTR    szShortcutPath,    // full file path for the shortcut
  1170. LPSTR     szProductCode,     // returned product code   - GUID
  1171. LPSTR     szFeatureId,       // returned Feature Id.
  1172. LPSTR     szComponentCode);  // returned component code - GUID
  1173. UINT WINAPI MsiGetShortcutTargetW(
  1174. LPCWSTR    szShortcutPath,    // full file path for the shortcut
  1175. LPWSTR     szProductCode,     // returned product code   - GUID
  1176. LPWSTR     szFeatureId,       // returned Feature Id.
  1177. LPWSTR     szComponentCode);  // returned component code - GUID
  1178. #ifdef UNICODE
  1179. #define MsiGetShortcutTarget  MsiGetShortcutTargetW
  1180. #else
  1181. #define MsiGetShortcutTarget  MsiGetShortcutTargetA
  1182. #endif // !UNICODE
  1183. #endif //(_WIN32_MSI >=  110)
  1184. #if (_WIN32_MSI >=  110)
  1185. // checks to see if a product is managed
  1186. // checks per-machine if called from system context, per-user if from
  1187. // user context
  1188. UINT WINAPI MsiIsProductElevatedA(
  1189. LPCSTR szProduct, // product code
  1190. BOOL *pfElevated);  // result   
  1191. // checks to see if a product is managed
  1192. // checks per-machine if called from system context, per-user if from
  1193. // user context
  1194. UINT WINAPI MsiIsProductElevatedW(
  1195. LPCWSTR szProduct, // product code
  1196. BOOL *pfElevated);  // result   
  1197. #ifdef UNICODE
  1198. #define MsiIsProductElevated  MsiIsProductElevatedW
  1199. #else
  1200. #define MsiIsProductElevated  MsiIsProductElevatedA
  1201. #endif // !UNICODE
  1202. #endif //(_WIN32_MSI >=  110)
  1203. // --------------------------------------------------------------------------
  1204. // Internal state migration APIs.
  1205. // --------------------------------------------------------------------------
  1206. #ifdef __cplusplus
  1207. }
  1208. #endif
  1209. // --------------------------------------------------------------------------
  1210. // Error codes for installer access functions - until merged to winerr.h
  1211. // --------------------------------------------------------------------------
  1212. #ifndef ERROR_INSTALL_FAILURE
  1213. #define ERROR_INSTALL_USEREXIT      1602L  // User cancel installation.
  1214. #define ERROR_INSTALL_FAILURE       1603L  // Fatal error during installation.
  1215. #define ERROR_INSTALL_SUSPEND       1604L  // Installation suspended, incomplete.
  1216. // LOCALIZE BEGIN:
  1217. #define ERROR_UNKNOWN_PRODUCT       1605L  // This action is only valid for products that are currently installed.
  1218. // LOCALIZE END
  1219. #define ERROR_UNKNOWN_FEATURE       1606L  // Feature ID not registered.
  1220. #define ERROR_UNKNOWN_COMPONENT     1607L  // Component ID not registered.
  1221. #define ERROR_UNKNOWN_PROPERTY      1608L  // Unknown property.
  1222. #define ERROR_INVALID_HANDLE_STATE  1609L  // Handle is in an invalid state.
  1223. // LOCALIZE BEGIN:
  1224. #define ERROR_BAD_CONFIGURATION     1610L  // The configuration data for this product is corrupt.  Contact your support personnel.
  1225. // LOCALIZE END:
  1226. #define ERROR_INDEX_ABSENT          1611L  // Component qualifier not present.
  1227. // LOCALIZE BEGIN:
  1228. #define ERROR_INSTALL_SOURCE_ABSENT 1612L  // The installation source for this product is not available.  Verify that the source exists and that you can access it.
  1229. // LOCALIZE END
  1230. #define ERROR_PRODUCT_UNINSTALLED   1614L  // Product is uninstalled.
  1231. #define ERROR_BAD_QUERY_SYNTAX      1615L  // SQL query syntax invalid or unsupported.
  1232. #define ERROR_INVALID_FIELD         1616L  // Record field does not exist.
  1233. #endif
  1234. // LOCALIZE BEGIN:
  1235. #ifndef ERROR_INSTALL_SERVICE_FAILURE
  1236. #define ERROR_INSTALL_SERVICE_FAILURE      1601L // The Windows Installer Service could not be accessed. This can occur if you are running Windows in safe mode, or if the Windows Installer is not correctly installed. Contact your support personnel for assistance.
  1237. #define ERROR_INSTALL_PACKAGE_VERSION      1613L // This installation package cannot be installed by the Windows Installer service.  You must install a Windows service pack that contains a newer version of the Windows Installer service.
  1238. #define ERROR_INSTALL_ALREADY_RUNNING      1618L // Another installation is already in progress.  Complete that installation before proceeding with this install.
  1239. #define ERROR_INSTALL_PACKAGE_OPEN_FAILED  1619L // This installation package could not be opened.  Verify that the package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer package.
  1240. #define ERROR_INSTALL_PACKAGE_INVALID      1620L // This installation package could not be opened.  Contact the application vendor to verify that this is a valid Windows Installer package.
  1241. #define ERROR_INSTALL_UI_FAILURE           1621L // There was an error starting the Windows Installer service user interface.  Contact your support personnel.
  1242. #define ERROR_INSTALL_LOG_FAILURE          1622L // Error opening installation log file.  Verify that the specified log file location exists and is writable.
  1243. #define ERROR_INSTALL_LANGUAGE_UNSUPPORTED 1623L // This language of this installation package is not supported by your system.
  1244. #define ERROR_INSTALL_PACKAGE_REJECTED     1625L // The system administrator has set policies to prevent this installation.
  1245. // LOCALIZE END
  1246. #define ERROR_FUNCTION_NOT_CALLED          1626L // Function could not be executed.
  1247. #define ERROR_FUNCTION_FAILED              1627L // Function failed during execution.
  1248. #define ERROR_INVALID_TABLE                1628L // Invalid or unknown table specified.
  1249. #define ERROR_DATATYPE_MISMATCH            1629L // Data supplied is of wrong type.
  1250. #define ERROR_UNSUPPORTED_TYPE             1630L // Data of this type is not supported.
  1251. // LOCALIZE BEGIN:
  1252. #define ERROR_CREATE_FAILED                1631L // The Windows Installer service failed to start.  Contact your support personnel.
  1253. // LOCALIZE END:
  1254. #endif
  1255. // LOCALIZE BEGIN:
  1256. #ifndef ERROR_INSTALL_TEMP_UNWRITABLE      
  1257. #define ERROR_INSTALL_TEMP_UNWRITABLE      1632L // The Temp folder is on a drive that is full or is inaccessible. Free up space on the drive or verify that you have write permission on the Temp folder.
  1258. #endif
  1259. #ifndef ERROR_INSTALL_PLATFORM_UNSUPPORTED
  1260. #define ERROR_INSTALL_PLATFORM_UNSUPPORTED 1633L // This installation package is not supported by this processor type. Contact your product vendor.
  1261. #endif
  1262. // LOCALIZE END
  1263. #ifndef ERROR_INSTALL_NOTUSED
  1264. #define ERROR_INSTALL_NOTUSED              1634L // Component not used on this machine
  1265. #endif
  1266. // LOCALIZE BEGIN:
  1267. #ifndef ERROR_INSTALL_TRANSFORM_FAILURE
  1268. #define ERROR_INSTALL_TRANSFORM_FAILURE     1624L // Error applying transforms.  Verify that the specified transform paths are valid.
  1269. #endif
  1270. #ifndef ERROR_PATCH_PACKAGE_OPEN_FAILED
  1271. #define ERROR_PATCH_PACKAGE_OPEN_FAILED    1635L // This patch package could not be opened.  Verify that the patch package exists and that you can access it, or contact the application vendor to verify that this is a valid Windows Installer patch package.
  1272. #define ERROR_PATCH_PACKAGE_INVALID        1636L // This patch package could not be opened.  Contact the application vendor to verify that this is a valid Windows Installer patch package.
  1273. #define ERROR_PATCH_PACKAGE_UNSUPPORTED    1637L // This patch package cannot be processed by the Windows Installer service.  You must install a Windows service pack that contains a newer version of the Windows Installer service.
  1274. #endif
  1275. #ifndef ERROR_PRODUCT_VERSION
  1276. #define ERROR_PRODUCT_VERSION              1638L // Another version of this product is already installed.  Installation of this version cannot continue.  To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.
  1277. #endif
  1278. #ifndef ERROR_INVALID_COMMAND_LINE
  1279. #define ERROR_INVALID_COMMAND_LINE         1639L // Invalid command line argument.  Consult the Windows Installer SDK for detailed command line help.
  1280. #endif
  1281. // The following three error codes are not returned from MSI version 1.0
  1282. #ifndef ERROR_INSTALL_REMOTE_DISALLOWED
  1283. #define ERROR_INSTALL_REMOTE_DISALLOWED    1640L // Only administrators have permission to add, remove, or configure server software during a Terminal services remote session. If you want to install or configure software on the server, contact your network administrator.
  1284. #endif
  1285. // LOCALIZE END
  1286. #ifndef ERROR_SUCCESS_REBOOT_INITIATED
  1287. #define ERROR_SUCCESS_REBOOT_INITIATED     1641L // The requested operation completed successfully.  The system will be restarted so the changes can take effect.
  1288. #endif
  1289. // LOCALIZE BEGIN:
  1290. #ifndef ERROR_PATCH_TARGET_NOT_FOUND
  1291. #define ERROR_PATCH_TARGET_NOT_FOUND       1642L // The upgrade patch cannot be installed by the Windows Installer service because the program to be upgraded may be missing, or the upgrade patch may update a different version of the program. Verify that the program to be upgraded exists on your computer and that you have the correct upgrade patch.
  1292. #endif
  1293. // LOCALIZE END
  1294. // The following two error codes are not returned from MSI version 1.0, 1.1. or 1.2
  1295. // LOCALIZE BEGIN:
  1296. #ifndef ERROR_PATCH_PACKAGE_REJECTED
  1297. #define ERROR_PATCH_PACKAGE_REJECTED       1643L // The patch package is not permitted by software restriction policy.
  1298. #endif
  1299. #ifndef ERROR_INSTALL_TRANSFORM_REJECTED
  1300. #define ERROR_INSTALL_TRANSFORM_REJECTED   1644L // One or more customizations are not permitted by software restriction policy.
  1301. #endif
  1302. // LOCALIZE END
  1303. #endif // _MSI_H_