📄 jwamsi.pas
字号:
{******************************************************************************}
{ }
{ Windows Installer API interface Unit for Object Pascal }
{ }
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
{ Corporation. All Rights Reserved. }
{ }
{ The original file is: msi.h, released June 2000. The original Pascal }
{ code is: Msi.pas, released June 2001. The initial developer of the }
{ Pascal code is Marcel van Brakel (brakelm@chello.nl). }
{ }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
{ Marcel van Brakel. All Rights Reserved. }
{ }
{ Contributors: Steve Moss (spm@coco.co.uk) }
{ }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
{ }
{ You may retrieve the latest version of this file at the Project JEDI home }
{ page, located at http://delphi-jedi.org or my personal homepage located at }
{ http://members.chello.nl/m.vanbrakel2 }
{ }
{ The contents of this file are used with permission, subject to the Mozilla }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at }
{ http://www.mozilla.org/MPL/MPL-1.1.html }
{ }
{ Software distributed under the License is distributed on an "AS IS" basis, }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License. }
{ }
{ Alternatively, the contents of this file may be used under the terms of the }
{ GNU Lesser General Public License (the "LGPL License"), in which case the }
{ provisions of the LGPL License are applicable instead of those above. }
{ If you wish to allow use of your version of this file only under the terms }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting the provisions above and }
{ replace them with the notice and other provisions required by the LGPL }
{ License. If you do not delete the provisions above, a recipient may use }
{ your version of this file under either the MPL or the LGPL License. }
{ }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{ }
{******************************************************************************}
unit JwaMsi;
{$WEAKPACKAGEUNIT}
{$HPPEMIT ''}
{$HPPEMIT '#include "msi.h"'}
{$HPPEMIT ''}
{$I WINDEFINES.INC}
interface
uses
JwaWinType, JwaWinCrypt { for PCCERT_CONTEXT };
type // TODO
LPVOID = Pointer;
PHWND = ^HWND;
{$DEFINE WIN32_NT_GREATER_EQUAL_0500}
{$IFDEF WIN32_WINNT_GREATER_EQUAL_0501}
{$DEFINE _WIN32_MSI_200}
{$DEFINE _WIN32_MSI_GREATER_EQUAL_110} // not in original!!
{$ELSE}
{$IFDEF WIN32_NT_GREATER_EQUAL_0500}
{$DEFINE WIN32_MSI_110}
{$ELSE}
{$DEFINE WIN32_MSI_100}
{$ENDIF WIN32_NT_GREATER_EQUAL_0500}
{$ENDIF WIN32_WINNT_GREATER_EQUAL_0501}
(*****************************************************************************\
* *
* msi.h - - Interface for external access to Installer Service *
* *
* Version 1.0 - 1.2 *
* *
* NOTES: All buffers sizes are TCHAR count, null included only on input *
* Return argument pointers may be null if not interested in value *
* *
* Copyright (c) 1999-2000, Microsoft Corp. All rights reserved. *
* *
\*****************************************************************************)
// --------------------------------------------------------------------------
// Installer generic handle definitions
// --------------------------------------------------------------------------
type
MSIHANDLE = DWORD; // abstract generic handle, 0 == no handle
{$EXTERNALSYM MSIHANDLE}
TMsiHandle = MSIHANDLE;
// Close a open handle of any type
// All handles obtained from API calls must be closed when no longer needed
// Normally succeeds, returning TRUE.
function MsiCloseHandle(hAny: MSIHANDLE): UINT; stdcall;
{$EXTERNALSYM MsiCloseHandle}
// Close all handles open in the process, a diagnostic call
// This should NOT be used as a cleanup mechanism -- use PMSIHANDLE class
// Can be called at termination to assure that all handles have been closed
// Returns 0 if all handles have been close, else number of open handles
function MsiCloseAllHandles: UINT; stdcall;
{$EXTERNALSYM MsiCloseAllHandles}
// Install message type for callback is a combination of the following:
// A message box style: MB_*, where MB_OK is the default
// A message box icon type: MB_ICON*, where no icon is the default
// A default button: MB_DEFBUTTON?, where MB_DEFBUTTON1 is the default
// One of the following install message types, no default
const
INSTALLMESSAGE_FATALEXIT = $00000000; // premature termination, possibly fatal OOM
{$EXTERNALSYM INSTALLMESSAGE_FATALEXIT}
INSTALLMESSAGE_ERROR = $01000000; // formatted error message
{$EXTERNALSYM INSTALLMESSAGE_ERROR}
INSTALLMESSAGE_WARNING = $02000000; // formatted warning message
{$EXTERNALSYM INSTALLMESSAGE_WARNING}
INSTALLMESSAGE_USER = $03000000; // user request message
{$EXTERNALSYM INSTALLMESSAGE_USER}
INSTALLMESSAGE_INFO = $04000000; // informative message for log
{$EXTERNALSYM INSTALLMESSAGE_INFO}
INSTALLMESSAGE_FILESINUSE = $05000000; // list of files in use that need to be replaced
{$EXTERNALSYM INSTALLMESSAGE_FILESINUSE}
INSTALLMESSAGE_RESOLVESOURCE = $06000000; // request to determine a valid source location
{$EXTERNALSYM INSTALLMESSAGE_RESOLVESOURCE}
INSTALLMESSAGE_OUTOFDISKSPACE = $07000000; // insufficient disk space message
{$EXTERNALSYM INSTALLMESSAGE_OUTOFDISKSPACE}
INSTALLMESSAGE_ACTIONSTART = $08000000; // start of action: action name & description
{$EXTERNALSYM INSTALLMESSAGE_ACTIONSTART}
INSTALLMESSAGE_ACTIONDATA = $09000000; // formatted data associated with individual action item
{$EXTERNALSYM INSTALLMESSAGE_ACTIONDATA}
INSTALLMESSAGE_PROGRESS = $0A000000; // progress gauge info: units so far, total
{$EXTERNALSYM INSTALLMESSAGE_PROGRESS}
INSTALLMESSAGE_COMMONDATA = $0B000000; // product info for dialog: language Id, dialog caption
{$EXTERNALSYM INSTALLMESSAGE_COMMONDATA}
INSTALLMESSAGE_INITIALIZE = $0C000000; // sent prior to UI initialization, no string data
{$EXTERNALSYM INSTALLMESSAGE_INITIALIZE}
INSTALLMESSAGE_TERMINATE = $0D000000; // sent after UI termination, no string data
{$EXTERNALSYM INSTALLMESSAGE_TERMINATE}
INSTALLMESSAGE_SHOWDIALOG = $0E000000; // sent prior to display or authored dialog or wizard
{$EXTERNALSYM INSTALLMESSAGE_SHOWDIALOG}
type
INSTALLMESSAGE = Longint;
{$EXTERNALSYM INSTALLMESSAGE}
TInstallMessage = INSTALLMESSAGE;
// external error handler supplied to installation API functions
type
INSTALLUI_HANDLERA = function (pvContext: LPVOID; iMessageType: UINT; szMessage: LPCSTR): Integer; stdcall;
{$EXTERNALSYM INSTALLUI_HANDLERA}
TInstallUIHandlerA = INSTALLUI_HANDLERA;
INSTALLUI_HANDLERW = function (pvContext: LPVOID; iMessageType: UINT; szMessage: LPCWSTR): Integer; stdcall;
{$EXTERNALSYM INSTALLUI_HANDLERW}
TInstallUIHandlerW = INSTALLUI_HANDLERW;
{$IFDEF UNICODE}
INSTALLUI_HANDLER = INSTALLUI_HANDLERW;
{$EXTERNALSYM INSTALLUI_HANDLER}
TInstallUIHandler = TInstallUIHandlerW;
{$ELSE}
INSTALLUI_HANDLER = INSTALLUI_HANDLERA;
{$EXTERNALSYM INSTALLUI_HANDLER}
TInstallUIHandler = TInstallUIHandlerA;
{$ENDIF}
const
INSTALLUILEVEL_NOCHANGE = 0; // UI level is unchanged
{$EXTERNALSYM INSTALLUILEVEL_NOCHANGE}
INSTALLUILEVEL_DEFAULT = 1; // default UI is used
{$EXTERNALSYM INSTALLUILEVEL_DEFAULT}
INSTALLUILEVEL_NONE = 2; // completely silent installation
{$EXTERNALSYM INSTALLUILEVEL_NONE}
INSTALLUILEVEL_BASIC = 3; // simple progress and error handling
{$EXTERNALSYM INSTALLUILEVEL_BASIC}
INSTALLUILEVEL_REDUCED = 4; // authored UI, wizard dialogs suppressed
{$EXTERNALSYM INSTALLUILEVEL_REDUCED}
INSTALLUILEVEL_FULL = 5; // authored UI with wizards, progress, errors
{$EXTERNALSYM INSTALLUILEVEL_FULL}
INSTALLUILEVEL_ENDDIALOG = $80; // display success/failure dialog at end of install
{$EXTERNALSYM INSTALLUILEVEL_ENDDIALOG}
INSTALLUILEVEL_PROGRESSONLY = $40; // display only progress dialog
{$EXTERNALSYM INSTALLUILEVEL_PROGRESSONLY}
INSTALLUILEVEL_HIDECANCEL = $20; // do not display the cancel button in basic UI
{$EXTERNALSYM INSTALLUILEVEL_HIDECANCEL}
INSTALLUILEVEL_SOURCERESONLY = $100; // force display of source resolution even if quiet
{$EXTERNALSYM INSTALLUILEVEL_SOURCERESONLY}
type
INSTALLUILEVEL = Longint;
{$EXTERNALSYM INSTALLUILEVEL}
TInstallUILevel = INSTALLUILEVEL;
const
INSTALLSTATE_NOTUSED = -7; // component disabled
{$EXTERNALSYM INSTALLSTATE_NOTUSED}
INSTALLSTATE_BADCONFIG = -6; // configuration data corrupt
{$EXTERNALSYM INSTALLSTATE_BADCONFIG}
INSTALLSTATE_INCOMPLETE = -5; // installation suspended or in progress
{$EXTERNALSYM INSTALLSTATE_INCOMPLETE}
INSTALLSTATE_SOURCEABSENT = -4; // run from source, source is unavailable
{$EXTERNALSYM INSTALLSTATE_SOURCEABSENT}
INSTALLSTATE_MOREDATA = -3; // return buffer overflow
{$EXTERNALSYM INSTALLSTATE_MOREDATA}
INSTALLSTATE_INVALIDARG = -2; // invalid function argument
{$EXTERNALSYM INSTALLSTATE_INVALIDARG}
INSTALLSTATE_UNKNOWN = -1; // unrecognized product or feature
{$EXTERNALSYM INSTALLSTATE_UNKNOWN}
INSTALLSTATE_BROKEN = 0; // broken
{$EXTERNALSYM INSTALLSTATE_BROKEN}
INSTALLSTATE_ADVERTISED = 1; // advertised feature
{$EXTERNALSYM INSTALLSTATE_ADVERTISED}
INSTALLSTATE_REMOVED = 1; // component being removed (action state, not settable)
{$EXTERNALSYM INSTALLSTATE_REMOVED}
INSTALLSTATE_ABSENT = 2; // uninstalled (or action state absent but clients remain)
{$EXTERNALSYM INSTALLSTATE_ABSENT}
INSTALLSTATE_LOCAL = 3; // installed on local drive
{$EXTERNALSYM INSTALLSTATE_LOCAL}
INSTALLSTATE_SOURCE = 4; // run from source, CD or net
{$EXTERNALSYM INSTALLSTATE_SOURCE}
INSTALLSTATE_DEFAULT = 5; // use default, local or source
{$EXTERNALSYM INSTALLSTATE_DEFAULT}
type
INSTALLSTATE = Longint;
{$EXTERNALSYM INSTALLSTATE}
TInstallState = INSTALLSTATE;
const
USERINFOSTATE_MOREDATA = -3; // return buffer overflow
{$EXTERNALSYM USERINFOSTATE_MOREDATA}
USERINFOSTATE_INVALIDARG = -2; // invalid function argument
{$EXTERNALSYM USERINFOSTATE_INVALIDARG}
USERINFOSTATE_UNKNOWN = -1; // unrecognized product
{$EXTERNALSYM USERINFOSTATE_UNKNOWN}
USERINFOSTATE_ABSENT = 0; // user info and PID not initialized
{$EXTERNALSYM USERINFOSTATE_ABSENT}
USERINFOSTATE_PRESENT = 1; // user info and PID initialized
{$EXTERNALSYM USERINFOSTATE_PRESENT}
type
USERINFOSTATE = DWORD;
{$EXTERNALSYM USERINFOSTATE}
TUserInfoState = USERINFOSTATE;
const
INSTALLLEVEL_DEFAULT = 0; // install authored default
{$EXTERNALSYM INSTALLLEVEL_DEFAULT}
INSTALLLEVEL_MINIMUM = 1; // install only required features
{$EXTERNALSYM INSTALLLEVEL_MINIMUM}
INSTALLLEVEL_MAXIMUM = $FFFF; // install all features
{$EXTERNALSYM INSTALLLEVEL_MAXIMUM}
type
INSTALLLEVEL = DWORD; // intermediate levels dependent on authoring
{$EXTERNALSYM INSTALLLEVEL}
TInstallLevel = INSTALLLEVEL;
const
REINSTALLMODE_REPAIR = $00000001; // Reserved bit - currently ignored
{$EXTERNALSYM REINSTALLMODE_REPAIR}
REINSTALLMODE_FILEMISSING = $00000002; // Reinstall only if file is missing
{$EXTERNALSYM REINSTALLMODE_FILEMISSING}
REINSTALLMODE_FILEOLDERVERSION = $00000004; // Reinstall if file is missing, or older version
{$EXTERNALSYM REINSTALLMODE_FILEOLDERVERSION}
REINSTALLMODE_FILEEQUALVERSION = $00000008; // Reinstall if file is missing, or equal or older version
{$EXTERNALSYM REINSTALLMODE_FILEEQUALVERSION}
REINSTALLMODE_FILEEXACT = $00000010; // Reinstall if file is missing, or not exact version
{$EXTERNALSYM REINSTALLMODE_FILEEXACT}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -