2 * Common prototypes for Action handlers
4 * Copyright 2005 Aric Stewart for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #ifndef __MSI_ACTION_H__
22 #define __MSI_ACTION_H__
24 #include "wine/list.h"
26 typedef struct tagMSIFEATURE
30 LPWSTR Feature_Parent
;
38 INSTALLSTATE Installed
;
39 INSTALLSTATE ActionRequest
;
42 struct list Components
;
47 typedef struct tagMSICOMPONENT
58 INSTALLSTATE Installed
;
59 INSTALLSTATE ActionRequest
;
67 LPWSTR AdvertiseString
;
70 typedef struct tagComponentList
73 MSICOMPONENT
*component
;
76 typedef struct tagMSIFOLDER
83 LPWSTR ResolvedTarget
;
84 LPWSTR ResolvedSource
;
85 LPWSTR Property
; /* initially set property */
86 struct tagMSIFOLDER
*Parent
;
88 /* 0 = uninitialized */
90 /* 2 = created remove if empty */
91 /* 3 = created persist if empty */
96 typedef struct tagMSIFILE
100 MSICOMPONENT
*Component
;
110 /* 0 = uninitialize */
111 /* 1 = not present */
112 /* 2 = present but replace */
113 /* 3 = present do not replace */
120 typedef struct tagMSITEMPFILE
127 typedef struct tagMSIAPPID
130 LPWSTR AppID
; /* Primary key */
131 LPWSTR RemoteServerName
;
133 LPWSTR ServiceParameters
;
135 BOOL ActivateAtStorage
;
136 BOOL RunAsInteractiveUser
;
139 typedef struct tagMSIPROGID MSIPROGID
;
141 typedef struct tagMSICLASS
144 LPWSTR clsid
; /* Primary Key */
145 LPWSTR Context
; /* Primary Key */
146 MSICOMPONENT
*Component
;
153 LPWSTR DefInprocHandler
;
154 LPWSTR DefInprocHandler32
;
158 /* not in the table, set during installation */
162 typedef struct tagMSIMIME MSIMIME
;
164 typedef struct tagMSIEXTENSION
167 LPWSTR Extension
; /* Primary Key */
168 MSICOMPONENT
*Component
;
173 /* not in the table, set during installation */
181 LPWSTR ProgID
; /* Primary Key */
186 /* not in the table, set during installation */
189 MSIPROGID
*VersionInd
;
192 typedef struct tagMSIVERB
204 LPWSTR ContentType
; /* Primary Key */
205 MSIEXTENSION
*Extension
;
208 /* not in the table, set during installation */
219 #define SEQUENCE_UI 0x1
220 #define SEQUENCE_EXEC 0x2
221 #define SEQUENCE_INSTALL 0x10
223 typedef struct tagMSISCRIPT
225 LPWSTR
*Actions
[TOTAL_SCRIPTS
];
226 UINT ActionCount
[TOTAL_SCRIPTS
];
227 BOOL ExecuteSequenceRun
;
228 BOOL CurrentlyScripting
;
230 LPWSTR
*UniqueActions
;
231 UINT UniqueActionsCount
;
235 extern UINT
ACTION_PerformAction(MSIPACKAGE
*package
, const WCHAR
*action
, BOOL force
);
236 extern UINT
ACTION_PerformUIAction(MSIPACKAGE
*package
, const WCHAR
*action
);
237 extern void ACTION_FinishCustomActions( MSIPACKAGE
* package
);
238 extern UINT
ACTION_CustomAction(MSIPACKAGE
*package
,const WCHAR
*action
, BOOL execute
);
240 /* actions in other modules */
241 extern UINT
ACTION_AppSearch(MSIPACKAGE
*package
);
242 extern UINT
ACTION_FindRelatedProducts(MSIPACKAGE
*package
);
243 extern UINT
ACTION_InstallFiles(MSIPACKAGE
*package
);
244 extern UINT
ACTION_DuplicateFiles(MSIPACKAGE
*package
);
245 extern UINT
ACTION_RegisterClassInfo(MSIPACKAGE
*package
);
246 extern UINT
ACTION_RegisterProgIdInfo(MSIPACKAGE
*package
);
247 extern UINT
ACTION_RegisterExtensionInfo(MSIPACKAGE
*package
);
248 extern UINT
ACTION_RegisterMIMEInfo(MSIPACKAGE
*package
);
252 extern DWORD
deformat_string(MSIPACKAGE
*package
, LPCWSTR ptr
, WCHAR
** data
);
253 extern LPWSTR
msi_dup_record_field(MSIRECORD
*row
, INT index
);
254 extern LPWSTR
msi_dup_property(MSIPACKAGE
*package
, LPCWSTR prop
);
255 extern LPWSTR
resolve_folder(MSIPACKAGE
*package
, LPCWSTR name
, BOOL source
,
256 BOOL set_prop
, MSIFOLDER
**folder
);
257 extern MSICOMPONENT
*get_loaded_component( MSIPACKAGE
* package
, LPCWSTR Component
);
258 extern MSIFEATURE
*get_loaded_feature( MSIPACKAGE
* package
, LPCWSTR Feature
);
259 extern MSIFILE
*get_loaded_file( MSIPACKAGE
* package
, LPCWSTR file
);
260 extern MSIFOLDER
*get_loaded_folder( MSIPACKAGE
*package
, LPCWSTR dir
);
261 extern int track_tempfile(MSIPACKAGE
*package
, LPCWSTR name
, LPCWSTR path
);
262 extern UINT
schedule_action(MSIPACKAGE
*package
, UINT script
, LPCWSTR action
);
263 extern LPWSTR
build_icon_path(MSIPACKAGE
*, LPCWSTR
);
264 extern DWORD
build_version_dword(LPCWSTR
);
265 extern LPWSTR
build_directory_name(DWORD
, ...);
266 extern BOOL
create_full_pathW(const WCHAR
*path
);
267 extern BOOL
ACTION_VerifyComponentForAction(MSIPACKAGE
*, MSICOMPONENT
*, INSTALLSTATE
);
268 extern BOOL
ACTION_VerifyFeatureForAction(MSIFEATURE
*, INSTALLSTATE
);
269 extern void reduce_to_longfilename(WCHAR
*);
270 extern void reduce_to_shortfilename(WCHAR
*);
271 extern LPWSTR
create_component_advertise_string(MSIPACKAGE
*, MSICOMPONENT
*, LPCWSTR
);
272 extern void ACTION_UpdateComponentStates(MSIPACKAGE
*package
, LPCWSTR szFeature
);
273 extern UINT
register_unique_action(MSIPACKAGE
*, LPCWSTR
);
274 extern BOOL
check_unique_action(MSIPACKAGE
*, LPCWSTR
);
275 extern WCHAR
* generate_error_string(MSIPACKAGE
*, UINT
, DWORD
, ... );
276 extern UINT
msi_create_component_directories( MSIPACKAGE
*package
);
279 /* control event stuff */
280 extern VOID
ControlEvent_FireSubscribedEvent(MSIPACKAGE
*package
, LPCWSTR event
,
282 extern VOID
ControlEvent_CleanupSubscriptions(MSIPACKAGE
*package
);
283 extern VOID
ControlEvent_SubscribeToEvent(MSIPACKAGE
*package
, LPCWSTR event
,
284 LPCWSTR control
, LPCWSTR attribute
);
285 extern VOID
ControlEvent_UnSubscribeToEvent( MSIPACKAGE
*package
, LPCWSTR event
,
286 LPCWSTR control
, LPCWSTR attribute
);
288 /* User Interface messages from the actions */
289 extern void ui_progress(MSIPACKAGE
*, int, int, int, int);
290 extern void ui_actiondata(MSIPACKAGE
*, LPCWSTR
, MSIRECORD
*);
293 /* string consts use a number of places and defined in helpers.c*/
294 extern const WCHAR cszSourceDir
[];
295 extern const WCHAR szProductCode
[];
296 extern const WCHAR cszRootDrive
[];
297 extern const WCHAR cszbs
[];
299 #endif /* __MSI_ACTION_H__ */