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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, 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;
43 struct list Components;
48 typedef struct tagMSICOMPONENT
59 INSTALLSTATE Installed;
60 INSTALLSTATE ActionRequest;
69 LPWSTR AdvertiseString;
72 typedef struct tagComponentList
75 MSICOMPONENT *component;
78 typedef struct tagFeatureList
84 typedef struct tagMSIFOLDER
89 LPWSTR SourceLongPath;
90 LPWSTR SourceShortPath;
92 LPWSTR ResolvedTarget;
93 LPWSTR ResolvedSource;
94 LPWSTR Property; /* initially set property */
95 struct tagMSIFOLDER *Parent;
97 /* 0 = uninitialized */
99 /* 2 = created remove if empty */
100 /* 3 = created persist if empty */
105 typedef enum _msi_file_state {
114 typedef struct tagMSIFILE
118 MSICOMPONENT *Component;
127 msi_file_state state;
133 typedef struct tagMSITEMPFILE
140 typedef struct tagMSIAPPID
143 LPWSTR AppID; /* Primary key */
144 LPWSTR RemoteServerName;
146 LPWSTR ServiceParameters;
148 BOOL ActivateAtStorage;
149 BOOL RunAsInteractiveUser;
152 typedef struct tagMSIPROGID MSIPROGID;
154 typedef struct tagMSICLASS
157 LPWSTR clsid; /* Primary Key */
158 LPWSTR Context; /* Primary Key */
159 MSICOMPONENT *Component;
166 LPWSTR DefInprocHandler;
167 LPWSTR DefInprocHandler32;
171 /* not in the table, set during installation */
175 typedef struct tagMSIMIME MSIMIME;
177 typedef struct tagMSIEXTENSION
180 LPWSTR Extension; /* Primary Key */
181 MSICOMPONENT *Component;
186 /* not in the table, set during installation */
194 LPWSTR ProgID; /* Primary Key */
199 /* not in the table, set during installation */
202 MSIPROGID *VersionInd;
205 typedef struct tagMSIVERB
217 LPWSTR ContentType; /* Primary Key */
218 MSIEXTENSION *Extension;
221 /* not in the table, set during installation */
232 #define SEQUENCE_UI 0x1
233 #define SEQUENCE_EXEC 0x2
234 #define SEQUENCE_INSTALL 0x10
236 typedef struct tagMSISCRIPT
238 LPWSTR *Actions[TOTAL_SCRIPTS];
239 UINT ActionCount[TOTAL_SCRIPTS];
240 BOOL ExecuteSequenceRun;
241 BOOL CurrentlyScripting;
243 LPWSTR *UniqueActions;
244 UINT UniqueActionsCount;
248 extern UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action, BOOL force);
249 extern UINT ACTION_PerformUIAction(MSIPACKAGE *package, const WCHAR *action);
250 extern void ACTION_FinishCustomActions( MSIPACKAGE* package);
251 extern UINT ACTION_CustomAction(MSIPACKAGE *package,const WCHAR *action, BOOL execute);
253 /* actions in other modules */
254 extern UINT ACTION_AppSearch(MSIPACKAGE *package);
255 extern UINT ACTION_FindRelatedProducts(MSIPACKAGE *package);
256 extern UINT ACTION_InstallFiles(MSIPACKAGE *package);
257 extern UINT ACTION_RemoveFiles(MSIPACKAGE *package);
258 extern UINT ACTION_DuplicateFiles(MSIPACKAGE *package);
259 extern UINT ACTION_RegisterClassInfo(MSIPACKAGE *package);
260 extern UINT ACTION_RegisterProgIdInfo(MSIPACKAGE *package);
261 extern UINT ACTION_RegisterExtensionInfo(MSIPACKAGE *package);
262 extern UINT ACTION_RegisterMIMEInfo(MSIPACKAGE *package);
263 extern UINT ACTION_RegisterFonts(MSIPACKAGE *package);
267 extern DWORD deformat_string(MSIPACKAGE *package, LPCWSTR ptr, WCHAR** data );
268 extern LPWSTR msi_dup_record_field(MSIRECORD *row, INT index);
269 extern LPWSTR msi_dup_property(MSIPACKAGE *package, LPCWSTR prop);
270 extern int msi_get_property_int( MSIPACKAGE *package, LPCWSTR prop, int def );
271 extern LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
272 BOOL set_prop, MSIFOLDER **folder);
273 extern MSICOMPONENT *get_loaded_component( MSIPACKAGE* package, LPCWSTR Component );
274 extern MSIFEATURE *get_loaded_feature( MSIPACKAGE* package, LPCWSTR Feature );
275 extern MSIFILE *get_loaded_file( MSIPACKAGE* package, LPCWSTR file );
276 extern MSIFOLDER *get_loaded_folder( MSIPACKAGE *package, LPCWSTR dir );
277 extern int track_tempfile(MSIPACKAGE *package, LPCWSTR name, LPCWSTR path);
278 extern UINT schedule_action(MSIPACKAGE *package, UINT script, LPCWSTR action);
279 extern LPWSTR build_icon_path(MSIPACKAGE *, LPCWSTR);
280 extern LPWSTR build_directory_name(DWORD , ...);
281 extern BOOL create_full_pathW(const WCHAR *path);
282 extern BOOL ACTION_VerifyComponentForAction(MSICOMPONENT*, INSTALLSTATE);
283 extern BOOL ACTION_VerifyFeatureForAction(MSIFEATURE*, INSTALLSTATE);
284 extern void reduce_to_longfilename(WCHAR*);
285 extern void reduce_to_shortfilename(WCHAR*);
286 extern LPWSTR create_component_advertise_string(MSIPACKAGE*, MSICOMPONENT*, LPCWSTR);
287 extern void ACTION_UpdateComponentStates(MSIPACKAGE *package, LPCWSTR szFeature);
288 extern UINT register_unique_action(MSIPACKAGE *, LPCWSTR);
289 extern BOOL check_unique_action(MSIPACKAGE *, LPCWSTR);
290 extern WCHAR* generate_error_string(MSIPACKAGE *, UINT, DWORD, ... );
291 extern UINT msi_create_component_directories( MSIPACKAGE *package );
292 extern void msi_ui_error( DWORD msg_id, DWORD type );
295 /* control event stuff */
296 extern VOID ControlEvent_FireSubscribedEvent(MSIPACKAGE *package, LPCWSTR event,
298 extern VOID ControlEvent_CleanupSubscriptions(MSIPACKAGE *package);
299 extern VOID ControlEvent_SubscribeToEvent(MSIPACKAGE *package, msi_dialog *dialog,
300 LPCWSTR event, LPCWSTR control, LPCWSTR attribute);
301 extern VOID ControlEvent_UnSubscribeToEvent( MSIPACKAGE *package, LPCWSTR event,
302 LPCWSTR control, LPCWSTR attribute );
304 /* User Interface messages from the actions */
305 extern void ui_progress(MSIPACKAGE *, int, int, int, int);
306 extern void ui_actiondata(MSIPACKAGE *, LPCWSTR, MSIRECORD *);
309 /* string consts use a number of places and defined in helpers.c*/
310 extern const WCHAR cszSourceDir[];
311 extern const WCHAR szProductCode[];
312 extern const WCHAR cszRootDrive[];
313 extern const WCHAR cszbs[];
315 #endif /* __MSI_ACTION_H__ */