ReactOS 0.4.17-dev-966-gf06eace
install.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "msi.h"
#include "msidefs.h"
#include "objbase.h"
#include "oleauto.h"
#include "msipriv.h"
#include "winemsi.h"
#include "wine/debug.h"
#include "wine/exception.h"
Include dependency graph for install.c:

Go to the source code of this file.

Macros

#define COBJMACROS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msi)
 
UINT WINAPI MsiDoActionA (MSIHANDLE hInstall, LPCSTR szAction)
 
UINT WINAPI MsiDoActionW (MSIHANDLE hInstall, LPCWSTR szAction)
 
UINT WINAPI MsiSequenceA (MSIHANDLE hInstall, LPCSTR szTable, INT iSequenceMode)
 
UINT WINAPI MsiSequenceW (MSIHANDLE hInstall, LPCWSTR szTable, INT iSequenceMode)
 
UINT msi_strcpy_to_awstring (const WCHAR *str, int len, awstring *awbuf, DWORD *sz)
 
UINT msi_strncpyWtoA (const WCHAR *str, int lenW, char *buf, DWORD *sz, BOOL remote)
 
UINT msi_strncpyW (const WCHAR *str, int len, WCHAR *buf, DWORD *sz)
 
const WCHAR * msi_get_target_folder (MSIPACKAGE *package, const WCHAR *name)
 
UINT WINAPI MsiGetTargetPathA (MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
 
UINT WINAPI MsiGetTargetPathW (MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf, DWORD *sz)
 
static WCHAR * get_source_root (MSIPACKAGE *package)
 
WCHAR * msi_resolve_source_folder (MSIPACKAGE *package, const WCHAR *name, MSIFOLDER **folder)
 
UINT WINAPI MsiGetSourcePathA (MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
 
UINT WINAPI MsiGetSourcePathW (MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf, DWORD *sz)
 
UINT WINAPI MsiSetTargetPathA (MSIHANDLE hInstall, LPCSTR szFolder, LPCSTR szFolderPath)
 
static void set_target_path (MSIPACKAGE *package, MSIFOLDER *folder, const WCHAR *path)
 
UINT MSI_SetTargetPathW (MSIPACKAGE *package, LPCWSTR szFolder, LPCWSTR szFolderPath)
 
UINT WINAPI MsiSetTargetPathW (MSIHANDLE hInstall, LPCWSTR szFolder, LPCWSTR szFolderPath)
 
BOOL WINAPI MsiGetMode (MSIHANDLE hInstall, MSIRUNMODE iRunMode)
 
UINT WINAPI MsiSetMode (MSIHANDLE hInstall, MSIRUNMODE iRunMode, BOOL fState)
 
UINT WINAPI MsiSetFeatureStateA (MSIHANDLE hInstall, LPCSTR szFeature, INSTALLSTATE iState)
 
void ACTION_UpdateComponentStates (MSIPACKAGE *package, MSIFEATURE *feature)
 
UINT MSI_SetFeatureStateW (MSIPACKAGE *package, LPCWSTR szFeature, INSTALLSTATE iState)
 
UINT WINAPI MsiSetFeatureStateW (MSIHANDLE hInstall, LPCWSTR szFeature, INSTALLSTATE iState)
 
UINT WINAPI MsiSetFeatureAttributesA (MSIHANDLE handle, LPCSTR feature, DWORD attrs)
 
static DWORD unmap_feature_attributes (DWORD attrs)
 
UINT WINAPI MsiSetFeatureAttributesW (MSIHANDLE handle, LPCWSTR name, DWORD attrs)
 
UINT WINAPI MsiGetFeatureStateA (MSIHANDLE hInstall, LPCSTR szFeature, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
 
UINT MSI_GetFeatureStateW (MSIPACKAGE *package, LPCWSTR szFeature, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
 
UINT WINAPI MsiGetFeatureStateW (MSIHANDLE hInstall, const WCHAR *szFeature, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
 
UINT WINAPI MsiGetFeatureCostA (MSIHANDLE hInstall, LPCSTR szFeature, MSICOSTTREE iCostTree, INSTALLSTATE iState, LPINT piCost)
 
static INT feature_cost (MSIFEATURE *feature)
 
UINT MSI_GetFeatureCost (MSIPACKAGE *package, MSIFEATURE *feature, MSICOSTTREE tree, INSTALLSTATE state, LPINT cost)
 
UINT WINAPI MsiGetFeatureCostW (MSIHANDLE hInstall, const WCHAR *szFeature, MSICOSTTREE iCostTree, INSTALLSTATE iState, INT *piCost)
 
UINT WINAPI MsiGetFeatureInfoA (MSIHANDLE handle, const char *feature, DWORD *attrs, char *title, DWORD *title_len, char *help, DWORD *help_len)
 
static DWORD map_feature_attributes (DWORD attrs)
 
static UINT MSI_GetFeatureInfo (MSIPACKAGE *package, LPCWSTR name, LPDWORD attrs, LPWSTR title, LPDWORD title_len, LPWSTR help, LPDWORD help_len)
 
UINT WINAPI MsiGetFeatureInfoW (MSIHANDLE handle, const WCHAR *feature, DWORD *attrs, WCHAR *title, DWORD *title_len, WCHAR *help, DWORD *help_len)
 
UINT WINAPI MsiSetComponentStateA (MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE iState)
 
UINT WINAPI MsiGetComponentStateA (MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
 
static UINT MSI_SetComponentStateW (MSIPACKAGE *package, LPCWSTR szComponent, INSTALLSTATE iState)
 
UINT MSI_GetComponentStateW (MSIPACKAGE *package, LPCWSTR szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
 
UINT WINAPI MsiSetComponentStateW (MSIHANDLE hInstall, LPCWSTR szComponent, INSTALLSTATE iState)
 
UINT WINAPI MsiGetComponentStateW (MSIHANDLE hInstall, const WCHAR *szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
 
LANGID WINAPI MsiGetLanguage (MSIHANDLE hInstall)
 
UINT MSI_SetInstallLevel (MSIPACKAGE *package, int iInstallLevel)
 
UINT WINAPI MsiSetInstallLevel (MSIHANDLE hInstall, int iInstallLevel)
 
UINT WINAPI MsiGetFeatureValidStatesW (MSIHANDLE hInstall, const WCHAR *szFeature, DWORD *pInstallState)
 
UINT WINAPI MsiGetFeatureValidStatesA (MSIHANDLE hInstall, const char *szFeature, DWORD *pInstallState)
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 23 of file install.c.

Function Documentation

◆ ACTION_UpdateComponentStates()

void ACTION_UpdateComponentStates ( MSIPACKAGE *  package,
MSIFEATURE *  feature 
)

Definition at line 833 of file install.c.

834{
835 INSTALLSTATE newstate;
836 ComponentList *cl;
837
838 newstate = feature->ActionRequest;
839 if (newstate == INSTALLSTATE_ABSENT) newstate = INSTALLSTATE_UNKNOWN;
840
842 {
844
845 if (!component->Enabled) continue;
846
847 TRACE("Modifying (%d): Component %s (Installed %d, Action %d, Request %d)\n",
848 newstate, debugstr_w(component->Component), component->Installed,
849 component->Action, component->ActionRequest);
850
851 if (newstate == INSTALLSTATE_LOCAL)
852 {
854 component->ActionRequest = INSTALLSTATE_LOCAL;
855 }
856 else
857 {
858 ComponentList *clist;
859 MSIFEATURE *f;
860
861 component->hasLocalFeature = FALSE;
862
863 component->Action = newstate;
864 component->ActionRequest = newstate;
865 /* if any other feature wants it local we need to set it local */
867 {
868 if ( f->ActionRequest != INSTALLSTATE_LOCAL &&
869 f->ActionRequest != INSTALLSTATE_SOURCE )
870 {
871 continue;
872 }
873 LIST_FOR_EACH_ENTRY(clist, &f->Components, ComponentList, entry)
874 {
875 if (clist->component == component &&
876 (f->ActionRequest == INSTALLSTATE_LOCAL ||
877 f->ActionRequest == INSTALLSTATE_SOURCE))
878 {
879 TRACE("Saved by %s\n", debugstr_w(f->Feature));
880 component->hasLocalFeature = TRUE;
881
883 {
884 if (f->Attributes & msidbFeatureAttributesFavorSource)
885 {
887 component->ActionRequest = INSTALLSTATE_SOURCE;
888 }
889 else
890 {
892 component->ActionRequest = INSTALLSTATE_LOCAL;
893 }
894 }
895 else if (component->Attributes & msidbComponentAttributesSourceOnly)
896 {
898 component->ActionRequest = INSTALLSTATE_SOURCE;
899 }
900 else
901 {
903 component->ActionRequest = INSTALLSTATE_LOCAL;
904 }
905 }
906 }
907 }
908 }
909 TRACE("Result (%d): Component %s (Installed %d, Action %d, Request %d)\n",
910 newstate, debugstr_w(component->Component), component->Installed,
911 component->Action, component->ActionRequest);
912 }
913}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
GLfloat f
Definition: glext.h:7540
uint32_t entry
Definition: isohybrid.c:63
#define f
Definition: ke_i.h:83
#define debugstr_w
Definition: kernel32.h:32
INTERNETFEATURELIST feature
Definition: misc.c:1807
@ INSTALLSTATE_UNKNOWN
Definition: msi.h:42
@ INSTALLSTATE_LOCAL
Definition: msi.h:46
@ INSTALLSTATE_ABSENT
Definition: msi.h:45
@ INSTALLSTATE_SOURCE
Definition: msi.h:47
@ msidbComponentAttributesOptional
Definition: msidefs.h:161
@ msidbComponentAttributesSourceOnly
Definition: msidefs.h:160
@ msidbFeatureAttributesFavorSource
Definition: msidefs.h:149
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:236
#define TRACE(s)
Definition: solgame.cpp:4
MSICOMPONENT * component
Definition: msipriv.h:568
struct list features
Definition: msipriv.h:415
int INSTALLSTATE
Definition: winemsi.idl:31

Referenced by MSI_SetFeatureStateW(), and seltree_update_feature_installstate().

◆ feature_cost()

static INT feature_cost ( MSIFEATURE *  feature)
static

Definition at line 1146 of file install.c.

1147{
1148 INT cost = 0;
1149 ComponentList *cl;
1150
1151 LIST_FOR_EACH_ENTRY( cl, &feature->Components, ComponentList, entry )
1152 {
1153 cost += cl->component->cost;
1154 }
1155 return cost;
1156}
int32_t INT
Definition: typedefs.h:58

Referenced by MSI_GetFeatureCost().

◆ get_source_root()

static WCHAR * get_source_root ( MSIPACKAGE *  package)
static

Definition at line 358 of file install.c.

359{
360 msi_set_sourcedir_props( package, FALSE );
361 return msi_dup_property( package->db, L"SourceDir" );
362}
UINT msi_set_sourcedir_props(MSIPACKAGE *package, BOOL replace)
Definition: action.c:348
#define L(x)
Definition: resources.c:13
WCHAR * msi_dup_property(MSIDATABASE *db, const WCHAR *prop) __WINE_DEALLOC(free) __WINE_MALLOC
MSIDATABASE * db
Definition: msipriv.h:407

Referenced by msi_resolve_source_folder().

◆ map_feature_attributes()

static DWORD map_feature_attributes ( DWORD  attrs)
static

Definition at line 1296 of file install.c.

1297{
1298 DWORD ret = 0;
1299
1306 return ret;
1307}
return ret
Definition: mutex.c:147
unsigned long DWORD
Definition: ntddk_ex.h:95
@ INSTALLFEATUREATTRIBUTE_FAVORSOURCE
Definition: msi.h:222
@ INSTALLFEATUREATTRIBUTE_NOUNSUPPORTEDADVERTISE
Definition: msi.h:226
@ INSTALLFEATUREATTRIBUTE_FAVORLOCAL
Definition: msi.h:221
@ INSTALLFEATUREATTRIBUTE_DISALLOWADVERTISE
Definition: msi.h:225
@ INSTALLFEATUREATTRIBUTE_FAVORADVERTISE
Definition: msi.h:224
@ INSTALLFEATUREATTRIBUTE_FOLLOWPARENT
Definition: msi.h:223
@ msidbFeatureAttributesFavorAdvertise
Definition: msidefs.h:151
@ msidbFeatureAttributesFollowParent
Definition: msidefs.h:150
@ msidbFeatureAttributesDisallowAdvertise
Definition: msidefs.h:152
@ msidbFeatureAttributesNoUnsupportedAdvertise
Definition: msidefs.h:154
@ msidbFeatureAttributesFavorLocal
Definition: msidefs.h:148

Referenced by MSI_GetFeatureInfo().

◆ msi_get_target_folder()

const WCHAR * msi_get_target_folder ( MSIPACKAGE *  package,
const WCHAR *  name 
)

Definition at line 232 of file install.c.

233{
235
236 if (!folder) return NULL;
237 if (!folder->ResolvedTarget)
238 {
240 while (parent->Parent && wcscmp( parent->Parent, parent->Directory ))
241 {
242 parent = msi_get_loaded_folder( package, parent->Parent );
243 }
244 msi_resolve_target_folder( package, parent->Directory, TRUE );
245 }
246 return folder->ResolvedTarget;
247}
#define NULL
Definition: types.h:112
MSIFOLDER * msi_get_loaded_folder(MSIPACKAGE *package, const WCHAR *dir)
Definition: action.c:582
void msi_resolve_target_folder(MSIPACKAGE *package, const WCHAR *name, BOOL load_prop)
Definition: action.c:2183
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1977
r parent
Definition: btrfs.c:3010
Definition: fci.c:112
Definition: name.c:39

Referenced by create_folder(), deformat_component(), get_duplicate_filename(), get_ini_file_name(), get_link_file(), HANDLE_CustomType34(), ITERATE_CreateFolders(), ITERATE_CreateShortcuts(), ITERATE_InstallODBCDriver(), ITERATE_RegisterTypeLibraries(), ITERATE_RemoveFolders(), MSI_SetTargetPathW(), MsiGetTargetPathA(), MsiGetTargetPathW(), resolve_keypath(), and set_target_path().

◆ MSI_GetComponentStateW()

UINT MSI_GetComponentStateW ( MSIPACKAGE *  package,
LPCWSTR  szComponent,
INSTALLSTATE *  piInstalled,
INSTALLSTATE *  piAction 
)

Definition at line 1430 of file install.c.

1432{
1433 MSICOMPONENT *comp;
1434
1435 TRACE("%p %s %p %p\n", package, debugstr_w(szComponent),
1436 piInstalled, piAction);
1437
1438 comp = msi_get_loaded_component(package,szComponent);
1439 if (!comp)
1441
1442 if (piInstalled)
1443 {
1444 if (comp->Enabled)
1445 *piInstalled = comp->Installed;
1446 else
1447 *piInstalled = INSTALLSTATE_UNKNOWN;
1448 }
1449
1450 if (piAction)
1451 {
1452 if (comp->Enabled)
1453 *piAction = comp->Action;
1454 else
1455 *piAction = INSTALLSTATE_UNKNOWN;
1456 }
1457
1458 TRACE("states (%i, %i)\n", comp->Installed, comp->Action );
1459 return ERROR_SUCCESS;
1460}
#define ERROR_SUCCESS
Definition: deptool.c:10
MSICOMPONENT * msi_get_loaded_component(MSIPACKAGE *package, const WCHAR *Component)
Definition: action.c:549
INSTALLSTATE Action
Definition: msipriv.h:546
INSTALLSTATE Installed
Definition: msipriv.h:544
#define ERROR_UNKNOWN_COMPONENT
Definition: winerror.h:1313

Referenced by MsiGetComponentStateW().

◆ MSI_GetFeatureCost()

UINT MSI_GetFeatureCost ( MSIPACKAGE *  package,
MSIFEATURE *  feature,
MSICOSTTREE  tree,
INSTALLSTATE  state,
LPINT  cost 
)

Definition at line 1158 of file install.c.

1160{
1161 TRACE("%s, %u, %d, %p\n", debugstr_w(feature->Feature), tree, state, cost);
1162
1163 *cost = 0;
1164 switch (tree)
1165 {
1167 {
1169
1171 {
1172 if (child->ActionRequest == state)
1173 *cost += feature_cost( child );
1174 }
1175 break;
1176 }
1178 {
1179 const WCHAR *feature_parent = feature->Feature_Parent;
1180 for (;;)
1181 {
1182 MSIFEATURE *parent = msi_get_loaded_feature( package, feature_parent );
1183 if (!parent)
1184 break;
1185
1186 if (parent->ActionRequest == state)
1187 *cost += feature_cost( parent );
1188
1189 feature_parent = parent->Feature_Parent;
1190 }
1191 break;
1192 }
1194 if (feature->ActionRequest == state)
1195 *cost = feature_cost( feature );
1196 break;
1197
1198 default:
1199 WARN("unhandled cost tree %u\n", tree);
1200 break;
1201 }
1202
1203 return ERROR_SUCCESS;
1204}
static int state
Definition: maze.c:121
#define WARN(fmt,...)
Definition: precomp.h:61
MSIFEATURE * msi_get_loaded_feature(MSIPACKAGE *package, const WCHAR *Feature)
Definition: action.c:560
static INT feature_cost(MSIFEATURE *feature)
Definition: install.c:1146
static HWND child
Definition: cursoricon.c:298
@ MSICOSTTREE_PARENTS
Definition: msiquery.h:44
@ MSICOSTTREE_CHILDREN
Definition: msiquery.h:43
@ MSICOSTTREE_SELFONLY
Definition: msiquery.h:42
short WCHAR
Definition: pedump.c:58

Referenced by MsiGetFeatureCostW(), and vcl_get_cost().

◆ MSI_GetFeatureInfo()

static UINT MSI_GetFeatureInfo ( MSIPACKAGE *  package,
LPCWSTR  name,
LPDWORD  attrs,
LPWSTR  title,
LPDWORD  title_len,
LPWSTR  help,
LPDWORD  help_len 
)
static

Definition at line 1309 of file install.c.

1311{
1314 int len;
1315
1316 if (!feature) return ERROR_UNKNOWN_FEATURE;
1317 if (attrs) *attrs = map_feature_attributes( feature->Attributes );
1318 if (title_len)
1319 {
1320 if (feature->Title) len = lstrlenW( feature->Title );
1321 else len = 0;
1322 if (*title_len <= len)
1323 {
1324 *title_len = len;
1325 if (title) r = ERROR_MORE_DATA;
1326 }
1327 else if (title)
1328 {
1329 if (feature->Title) lstrcpyW( title, feature->Title );
1330 else *title = 0;
1331 *title_len = len;
1332 }
1333 }
1334 if (help_len)
1335 {
1336 if (feature->Description) len = lstrlenW( feature->Description );
1337 else len = 0;
1338 if (*help_len <= len)
1339 {
1340 *help_len = len;
1341 if (help) r = ERROR_MORE_DATA;
1342 }
1343 else if (help)
1344 {
1345 if (feature->Description) lstrcpyW( help, feature->Description );
1346 else *help = 0;
1347 *help_len = len;
1348 }
1349 }
1350 return r;
1351}
int help
Definition: sort.c:20
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
static DWORD map_feature_attributes(DWORD attrs)
Definition: install.c:1296
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLenum GLsizei len
Definition: glext.h:6722
unsigned int UINT
Definition: sysinfo.c:13
static char title[]
Definition: ps.c:92
#define ERROR_UNKNOWN_FEATURE
Definition: winerror.h:1312

Referenced by MsiGetFeatureInfoW().

◆ MSI_GetFeatureStateW()

UINT MSI_GetFeatureStateW ( MSIPACKAGE *  package,
LPCWSTR  szFeature,
INSTALLSTATE *  piInstalled,
INSTALLSTATE *  piAction 
)

Definition at line 1068 of file install.c.

1070{
1072
1073 feature = msi_get_loaded_feature(package,szFeature);
1074 if (!feature)
1075 return ERROR_UNKNOWN_FEATURE;
1076
1077 if (piInstalled)
1078 *piInstalled = feature->Installed;
1079
1080 if (piAction)
1081 *piAction = feature->ActionRequest;
1082
1083 TRACE("returning %i %i\n", feature->Installed, feature->ActionRequest);
1084
1085 return ERROR_SUCCESS;
1086}

Referenced by MsiGetFeatureStateW().

◆ msi_resolve_source_folder()

WCHAR * msi_resolve_source_folder ( MSIPACKAGE *  package,
const WCHAR *  name,
MSIFOLDER **  folder 
)

Definition at line 364 of file install.c.

365{
366 MSIFOLDER *f;
367 LPWSTR p, path = NULL, parent;
368
369 TRACE("working to resolve %s\n", debugstr_w(name));
370
371 if (!wcscmp( name, L"SourceDir" )) name = L"TARGETDIR";
372 if (!(f = msi_get_loaded_folder( package, name ))) return NULL;
373
374 /* special resolving for root dir */
375 if (!wcscmp( name, L"TARGETDIR" ) && !f->ResolvedSource)
376 {
377 f->ResolvedSource = get_source_root( package );
378 }
379 if (folder) *folder = f;
380 if (f->ResolvedSource)
381 {
382 path = wcsdup( f->ResolvedSource );
383 TRACE(" already resolved to %s\n", debugstr_w(path));
384 return path;
385 }
386 if (!f->Parent) return path;
387 parent = f->Parent;
388 TRACE(" ! parent is %s\n", debugstr_w(parent));
389
390 p = msi_resolve_source_folder( package, parent, NULL );
391
393 path = get_source_root( package );
394 else if (package->WordCount & msidbSumInfoSourceTypeSFN)
395 path = msi_build_directory_name( 3, p, f->SourceShortPath, NULL );
396 else
397 path = msi_build_directory_name( 3, p, f->SourceLongPath, NULL );
398
399 TRACE("-> %s\n", debugstr_w(path));
400 f->ResolvedSource = wcsdup( path );
401 free( p );
402
403 return path;
404}
#define free
Definition: debug_ros.c:5
WCHAR *WINAPIV msi_build_directory_name(DWORD count,...)
Definition: action.c:2006
WCHAR * msi_resolve_source_folder(MSIPACKAGE *package, const WCHAR *name, MSIFOLDER **folder)
Definition: install.c:364
static WCHAR * get_source_root(MSIPACKAGE *package)
Definition: install.c:358
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
GLfloat GLfloat p
Definition: glext.h:8902
@ msidbSumInfoSourceTypeSFN
Definition: msidefs.h:221
@ msidbSumInfoSourceTypeCompressed
Definition: msidefs.h:222
UINT WordCount
Definition: msipriv.h:472
uint16_t * LPWSTR
Definition: typedefs.h:56

Referenced by deformat_component(), msi_resolve_file_source(), msi_resolve_source_folder(), MsiGetSourcePathA(), and MsiGetSourcePathW().

◆ MSI_SetComponentStateW()

static UINT MSI_SetComponentStateW ( MSIPACKAGE *  package,
LPCWSTR  szComponent,
INSTALLSTATE  iState 
)
static

Definition at line 1413 of file install.c.

1415{
1416 MSICOMPONENT *comp;
1417
1418 TRACE("%p %s %d\n", package, debugstr_w(szComponent), iState);
1419
1420 comp = msi_get_loaded_component(package, szComponent);
1421 if (!comp)
1423
1424 if (comp->Enabled)
1425 comp->Action = iState;
1426
1427 return ERROR_SUCCESS;
1428}

Referenced by MsiSetComponentStateW().

◆ MSI_SetFeatureStateW()

UINT MSI_SetFeatureStateW ( MSIPACKAGE *  package,
LPCWSTR  szFeature,
INSTALLSTATE  iState 
)

Definition at line 915 of file install.c.

916{
917 UINT rc = ERROR_SUCCESS;
919
920 TRACE("%s %i\n", debugstr_w(szFeature), iState);
921
922 feature = msi_get_loaded_feature( package, szFeature );
923 if (!feature)
925
926 if (iState == INSTALLSTATE_ADVERTISED &&
928 {
929 TRACE("Advertising is disallowed; making feature absent\n");
930 iState = INSTALLSTATE_ABSENT;
931 }
932
933 feature->ActionRequest = iState;
934
936
937 /* update all the features that are children of this feature */
939 {
940 if (child->Feature_Parent && !wcscmp( szFeature, child->Feature_Parent ))
941 MSI_SetFeatureStateW(package, child->Feature, iState);
942 }
943
944 return rc;
945}
UINT MSI_SetFeatureStateW(MSIPACKAGE *package, LPCWSTR szFeature, INSTALLSTATE iState)
Definition: install.c:915
void ACTION_UpdateComponentStates(MSIPACKAGE *package, MSIFEATURE *feature)
Definition: install.c:833
@ INSTALLSTATE_ADVERTISED
Definition: msi.h:44

Referenced by event_add_local(), event_add_source(), event_remove(), MSI_SetFeatureStateW(), MsiConfigureFeatureW(), and MsiSetFeatureStateW().

◆ MSI_SetInstallLevel()

UINT MSI_SetInstallLevel ( MSIPACKAGE *  package,
int  iInstallLevel 
)

Definition at line 1574 of file install.c.

1575{
1576 WCHAR level[6];
1577 int len;
1578 UINT r;
1579
1580 TRACE("%p %i\n", package, iInstallLevel);
1581
1582 if (iInstallLevel > 32767)
1584
1585 if (iInstallLevel < 1)
1586 return MSI_SetFeatureStates( package );
1587
1588 len = swprintf( level, ARRAY_SIZE(level), L"%d", iInstallLevel );
1589 r = msi_set_property( package->db, L"INSTALLLEVEL", level, len );
1590 if ( r == ERROR_SUCCESS )
1591 r = MSI_SetFeatureStates( package );
1592
1593 return r;
1594}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
UINT MSI_SetFeatureStates(MSIPACKAGE *package)
Definition: action.c:1638
#define swprintf
Definition: precomp.h:40
GLint level
Definition: gl.h:1546
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int)
Definition: package.c:2132

Referenced by event_set_install_level(), and MsiSetInstallLevel().

◆ MSI_SetTargetPathW()

UINT MSI_SetTargetPathW ( MSIPACKAGE *  package,
LPCWSTR  szFolder,
LPCWSTR  szFolderPath 
)

Definition at line 564 of file install.c.

565{
566 DWORD attrib;
568 MSIFILE *file;
569
570 TRACE("%p %s %s\n", package, debugstr_w(szFolder), debugstr_w(szFolderPath));
571
572 attrib = msi_get_file_attributes( package, szFolderPath );
573 /* native MSI tests writeability by making temporary files at each drive */
574 if (attrib != INVALID_FILE_ATTRIBUTES &&
575 (attrib & FILE_ATTRIBUTE_OFFLINE || attrib & FILE_ATTRIBUTE_READONLY))
576 {
578 }
579 if (!(folder = msi_get_loaded_folder( package, szFolder ))) return ERROR_DIRECTORY;
580
581 set_target_path( package, folder, szFolderPath );
582
584 {
585 const WCHAR *dir;
586 MSICOMPONENT *comp = file->Component;
587
588 if (!comp->Enabled || msi_is_global_assembly( comp )) continue;
589
590 dir = msi_get_target_folder( package, comp->Directory );
591 free( file->TargetPath );
592 file->TargetPath = msi_build_directory_name( 2, dir, file->FileName );
593 }
594 return ERROR_SUCCESS;
595}
unsigned int dir
Definition: maze.c:112
BOOL msi_is_global_assembly(MSICOMPONENT *comp)
Definition: action.c:2035
DWORD msi_get_file_attributes(MSIPACKAGE *package, const WCHAR *path)
Definition: files.c:115
static void set_target_path(MSIPACKAGE *package, MSIFOLDER *folder, const WCHAR *path)
Definition: install.c:542
const WCHAR * msi_get_target_folder(MSIPACKAGE *package, const WCHAR *name)
Definition: install.c:232
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_OFFLINE
Definition: nt_native.h:712
Definition: fci.c:123
LPWSTR Directory
Definition: msipriv.h:540
struct list files
Definition: msipriv.h:416
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
#define ERROR_DIRECTORY
Definition: winerror.h:416
#define ERROR_FUNCTION_FAILED
Definition: winerror.h:1333

Referenced by ACTION_CustomAction(), event_set_target_path(), and MsiSetTargetPathW().

◆ msi_strcpy_to_awstring()

UINT msi_strcpy_to_awstring ( const WCHAR *  str,
int  len,
awstring *  awbuf,
DWORD *  sz 
)

Definition at line 158 of file install.c.

159{
161
162 if (awbuf->str.w && !sz)
164 if (!sz)
165 return ERROR_SUCCESS;
166
167 if (len < 0) len = lstrlenW( str );
168
169 if (awbuf->unicode && awbuf->str.w)
170 {
171 memcpy( awbuf->str.w, str, min(len + 1, *sz) * sizeof(WCHAR) );
172 if (*sz && len >= *sz)
173 awbuf->str.w[*sz - 1] = 0;
174 }
175 else
176 {
177 int lenA = WideCharToMultiByte( CP_ACP, 0, str, len + 1, NULL, 0, NULL, NULL );
178 if (lenA) lenA--;
179 WideCharToMultiByte( CP_ACP, 0, str, len + 1, awbuf->str.a, *sz, NULL, NULL );
180 if (awbuf->str.a && *sz && lenA >= *sz)
181 awbuf->str.a[*sz - 1] = 0;
182 len = lenA;
183 }
184 if (awbuf->str.w && len >= *sz)
186 *sz = len;
187 return r;
188}
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define min(a, b)
Definition: monoChain.cc:55
const WCHAR * str
LPWSTR w
Definition: msipriv.h:767
LPSTR a
Definition: msipriv.h:766
union awstring::@616 str
BOOL unicode
Definition: msipriv.h:764

Referenced by MSI_EnumComponentQualifiers(), MSI_GetComponentPath(), MSI_GetProductInfo(), and MSI_GetUserInfo().

◆ msi_strncpyW()

UINT msi_strncpyW ( const WCHAR *  str,
int  len,
WCHAR *  buf,
DWORD *  sz 
)

Definition at line 213 of file install.c.

214{
216
217 if (!sz)
219
220 if (len < 0) len = lstrlenW(str);
221 if (buf)
222 memcpy(buf, str, min(len + 1, *sz) * sizeof(WCHAR));
223 if (buf && len >= *sz)
224 {
225 if (*sz) buf[*sz - 1] = 0;
227 }
228 *sz = len;
229 return r;
230}
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751

Referenced by MsiFormatRecordW(), MsiGetPropertyW(), MsiGetSourcePathW(), MsiGetTargetPathW(), MsiSummaryInfoGetPropertyW(), and MsiViewGetErrorW().

◆ msi_strncpyWtoA()

UINT msi_strncpyWtoA ( const WCHAR *  str,
int  lenW,
char *  buf,
DWORD *  sz,
BOOL  remote 
)

Definition at line 190 of file install.c.

191{
193 DWORD lenA;
194
195 if (!sz)
197
198 if (lenW < 0) lenW = lstrlenW(str);
199 lenA = WideCharToMultiByte(CP_ACP, 0, str, lenW + 1, NULL, 0, NULL, NULL);
200 WideCharToMultiByte(CP_ACP, 0, str, lenW + 1, buf, *sz, NULL, NULL);
201 lenA--;
202 if (buf && lenA >= *sz)
203 {
204 if (*sz) buf[*sz - 1] = 0;
206 }
207 if (remote && lenA >= *sz)
208 lenA *= 2;
209 *sz = lenA;
210 return r;
211}

Referenced by MsiFormatRecordA(), MsiGetPropertyA(), MsiGetSourcePathA(), MsiGetTargetPathA(), MsiSummaryInfoGetPropertyA(), and MsiViewGetErrorA().

◆ MsiDoActionA()

UINT WINAPI MsiDoActionA ( MSIHANDLE  hInstall,
LPCSTR  szAction 
)

◆ MsiDoActionW()

UINT WINAPI MsiDoActionW ( MSIHANDLE  hInstall,
LPCWSTR  szAction 
)

Definition at line 64 of file install.c.

65{
66 MSIPACKAGE *package;
67 UINT ret;
68
69 TRACE("%s\n",debugstr_w(szAction));
70
71 if (!szAction)
73
74 package = msihandle2msiinfo( hInstall, MSIHANDLETYPE_PACKAGE );
75 if (!package)
76 {
77 MSIHANDLE remote;
78
79 if (!(remote = msi_get_remote(hInstall)))
81
82 __TRY
83 {
84 ret = remote_DoAction(remote, szAction);
85 }
87 {
89 }
91
92 return ret;
93 }
94
95 ret = ACTION_PerformAction(package, szAction);
96 msiobj_release( &package->hdr );
97
98 return ret;
99}
static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *eptr)
Definition: rpc.c:184
#define __TRY
Definition: compat.h:80
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
#define __ENDTRY
Definition: compat.h:82
UINT ACTION_PerformAction(MSIPACKAGE *package, const WCHAR *action)
Definition: action.c:7837
MSIHANDLE msi_get_remote(MSIHANDLE handle)
Definition: handle.c:183
int msiobj_release(MSIOBJECTHDR *info)
Definition: handle.c:241
#define GetExceptionCode
Definition: excpt.h:83
MSIOBJECTHDR hdr
Definition: msipriv.h:406
#define __EXCEPT(func)
Definition: exception.h:62
unsigned long MSIHANDLE
Definition: winemsi.idl:27

Referenced by MsiDoActionA(), s_remote_DoAction(), and session_invoke().

◆ MsiGetComponentStateA()

UINT WINAPI MsiGetComponentStateA ( MSIHANDLE  hInstall,
LPCSTR  szComponent,
INSTALLSTATE *  piInstalled,
INSTALLSTATE *  piAction 
)

Definition at line 1398 of file install.c.

1400{
1401 LPWSTR szwComponent= NULL;
1402 UINT rc;
1403
1404 szwComponent= strdupAtoW(szComponent);
1405
1406 rc = MsiGetComponentStateW(hInstall,szwComponent,piInstalled, piAction);
1407
1408 free(szwComponent);
1409
1410 return rc;
1411}
UINT WINAPI MsiGetComponentStateW(MSIHANDLE hInstall, const WCHAR *szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
Definition: install.c:1503

Referenced by test_component_states(), test_feature_states(), test_MsiSetComponentState(), and test_removefiles().

◆ MsiGetComponentStateW()

UINT WINAPI MsiGetComponentStateW ( MSIHANDLE  hInstall,
const WCHAR *  szComponent,
INSTALLSTATE *  piInstalled,
INSTALLSTATE *  piAction 
)

Definition at line 1503 of file install.c.

1505{
1506 MSIPACKAGE* package;
1507 UINT ret;
1508
1509 TRACE( "%lu, %s, %p, %p\n", hInstall, debugstr_w(szComponent), piInstalled, piAction );
1510
1511 if (!szComponent)
1513
1514 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
1515 if (!package)
1516 {
1517 MSIHANDLE remote;
1518
1519 if (!(remote = msi_get_remote(hInstall)))
1520 return ERROR_INVALID_HANDLE;
1521
1522 __TRY
1523 {
1524 ret = remote_GetComponentState(remote, szComponent, piInstalled, piAction);
1525 }
1527 {
1529 }
1530 __ENDTRY
1531
1532 return ret;
1533 }
1534
1535 ret = MSI_GetComponentStateW( package, szComponent, piInstalled, piAction);
1536 msiobj_release( &package->hdr );
1537 return ret;
1538}
UINT MSI_GetComponentStateW(MSIPACKAGE *package, LPCWSTR szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
Definition: install.c:1430

Referenced by MsiGetComponentStateA(), and s_remote_GetComponentState().

◆ MsiGetFeatureCostA()

UINT WINAPI MsiGetFeatureCostA ( MSIHANDLE  hInstall,
LPCSTR  szFeature,
MSICOSTTREE  iCostTree,
INSTALLSTATE  iState,
LPINT  piCost 
)

Definition at line 1131 of file install.c.

1133{
1134 LPWSTR szwFeature = NULL;
1135 UINT rc;
1136
1137 szwFeature = strdupAtoW(szFeature);
1138
1139 rc = MsiGetFeatureCostW(hInstall, szwFeature, iCostTree, iState, piCost);
1140
1141 free(szwFeature);
1142
1143 return rc;
1144}
UINT WINAPI MsiGetFeatureCostW(MSIHANDLE hInstall, const WCHAR *szFeature, MSICOSTTREE iCostTree, INSTALLSTATE iState, INT *piCost)
Definition: install.c:1209

Referenced by test_costs().

◆ MsiGetFeatureCostW()

UINT WINAPI MsiGetFeatureCostW ( MSIHANDLE  hInstall,
const WCHAR *  szFeature,
MSICOSTTREE  iCostTree,
INSTALLSTATE  iState,
INT *  piCost 
)

Definition at line 1209 of file install.c.

1211{
1212 MSIPACKAGE *package;
1214 UINT ret;
1215
1216 TRACE( "%lu, %s, %d, %d, %p\n", hInstall, debugstr_w(szFeature), iCostTree, iState, piCost );
1217
1218 if (!szFeature)
1220
1221 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
1222 if (!package)
1223 {
1224 MSIHANDLE remote;
1225
1226 if (!(remote = msi_get_remote(hInstall)))
1227 return ERROR_INVALID_HANDLE;
1228
1229 __TRY
1230 {
1231 ret = remote_GetFeatureCost(remote, szFeature, iCostTree, iState, piCost);
1232 }
1234 {
1236 }
1237 __ENDTRY
1238
1239 return ret;
1240 }
1241
1242 if (!piCost)
1243 {
1244 msiobj_release( &package->hdr );
1246 }
1247
1248 feature = msi_get_loaded_feature(package, szFeature);
1249
1250 if (feature)
1251 ret = MSI_GetFeatureCost(package, feature, iCostTree, iState, piCost);
1252 else
1254
1255 msiobj_release( &package->hdr );
1256 return ret;
1257}
UINT MSI_GetFeatureCost(MSIPACKAGE *package, MSIFEATURE *feature, MSICOSTTREE tree, INSTALLSTATE state, LPINT cost)
Definition: install.c:1158

Referenced by MsiGetFeatureCostA(), and s_remote_GetFeatureCost().

◆ MsiGetFeatureInfoA()

UINT WINAPI MsiGetFeatureInfoA ( MSIHANDLE  handle,
const char *  feature,
DWORD *  attrs,
char *  title,
DWORD *  title_len,
char *  help,
DWORD *  help_len 
)

Definition at line 1262 of file install.c.

1264{
1265 UINT r;
1266 WCHAR *titleW = NULL, *helpW = NULL, *featureW = NULL;
1267
1268 TRACE( "%lu, %s, %p, %p, %p, %p, %p\n", handle, debugstr_a(feature), attrs, title,
1269 title_len, help, help_len );
1270
1271 if (feature && !(featureW = strdupAtoW( feature ))) return ERROR_OUTOFMEMORY;
1272
1273 if (title && title_len && !(titleW = malloc( *title_len * sizeof(WCHAR) )))
1274 {
1275 free( featureW );
1276 return ERROR_OUTOFMEMORY;
1277 }
1278 if (help && help_len && !(helpW = malloc( *help_len * sizeof(WCHAR) )))
1279 {
1280 free( featureW );
1281 free( titleW );
1282 return ERROR_OUTOFMEMORY;
1283 }
1284 r = MsiGetFeatureInfoW( handle, featureW, attrs, titleW, title_len, helpW, help_len );
1285 if (r == ERROR_SUCCESS)
1286 {
1287 if (titleW) WideCharToMultiByte( CP_ACP, 0, titleW, -1, title, *title_len + 1, NULL, NULL );
1288 if (helpW) WideCharToMultiByte( CP_ACP, 0, helpW, -1, help, *help_len + 1, NULL, NULL );
1289 }
1290 free( titleW );
1291 free( helpW );
1292 free( featureW );
1293 return r;
1294}
#define malloc
Definition: debug_ros.c:4
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
UINT WINAPI MsiGetFeatureInfoW(MSIHANDLE handle, const WCHAR *feature, DWORD *attrs, WCHAR *title, DWORD *title_len, WCHAR *help, DWORD *help_len)
Definition: install.c:1356
static const WCHAR titleW[]
Definition: htmlelem.c:1067
static const WCHAR helpW[]
Definition: htmlevent.c:70

Referenced by test_MsiGetFeatureInfo(), and test_MsiSetFeatureAttributes().

◆ MsiGetFeatureInfoW()

UINT WINAPI MsiGetFeatureInfoW ( MSIHANDLE  handle,
const WCHAR *  feature,
DWORD *  attrs,
WCHAR *  title,
DWORD *  title_len,
WCHAR *  help,
DWORD *  help_len 
)

Definition at line 1356 of file install.c.

1358{
1359 UINT r;
1360 MSIPACKAGE *package;
1361
1362 TRACE( "%lu, %s, %p, %p, %p, %p, %p\n", handle, debugstr_w(feature), attrs, title,
1363 title_len, help, help_len );
1364
1365 if (!feature) return ERROR_INVALID_PARAMETER;
1366
1367 if (!(package = msihandle2msiinfo( handle, MSIHANDLETYPE_PACKAGE )))
1368 return ERROR_INVALID_HANDLE;
1369
1370 /* features may not have been loaded yet */
1371 msi_load_all_components( package );
1372 msi_load_all_features( package );
1373
1374 r = MSI_GetFeatureInfo( package, feature, attrs, title, title_len, help, help_len );
1375 msiobj_release( &package->hdr );
1376 return r;
1377}
UINT msi_load_all_components(MSIPACKAGE *package)
Definition: action.c:806
UINT msi_load_all_features(MSIPACKAGE *package)
Definition: action.c:949
void * msihandle2msiinfo(MSIHANDLE handle, UINT type)
Definition: handle.c:158
static UINT MSI_GetFeatureInfo(MSIPACKAGE *package, LPCWSTR name, LPDWORD attrs, LPWSTR title, LPDWORD title_len, LPWSTR help, LPDWORD help_len)
Definition: install.c:1309
#define MSIHANDLETYPE_PACKAGE
Definition: msipriv.h:750

Referenced by MsiGetFeatureInfoA().

◆ MsiGetFeatureStateA()

UINT WINAPI MsiGetFeatureStateA ( MSIHANDLE  hInstall,
LPCSTR  szFeature,
INSTALLSTATE *  piInstalled,
INSTALLSTATE *  piAction 
)

Definition at line 1055 of file install.c.

1057{
1058 LPWSTR szwFeature = NULL;
1059 UINT rc;
1060
1061 if (szFeature && !(szwFeature = strdupAtoW(szFeature))) return ERROR_OUTOFMEMORY;
1062
1063 rc = MsiGetFeatureStateW(hInstall, szwFeature, piInstalled, piAction);
1064 free(szwFeature);
1065 return rc;
1066}
UINT WINAPI MsiGetFeatureStateW(MSIHANDLE hInstall, const WCHAR *szFeature, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
Definition: install.c:1091

Referenced by test_feature_states().

◆ MsiGetFeatureStateW()

UINT WINAPI MsiGetFeatureStateW ( MSIHANDLE  hInstall,
const WCHAR *  szFeature,
INSTALLSTATE *  piInstalled,
INSTALLSTATE *  piAction 
)

Definition at line 1091 of file install.c.

1093{
1094 MSIPACKAGE* package;
1095 UINT ret;
1096
1097 TRACE( "%lu, %s, %p, %p\n", hInstall, debugstr_w(szFeature), piInstalled, piAction );
1098
1099 if (!szFeature)
1100 return ERROR_UNKNOWN_FEATURE;
1101
1102 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
1103 if (!package)
1104 {
1105 MSIHANDLE remote;
1106
1107 if (!(remote = msi_get_remote(hInstall)))
1108 return ERROR_INVALID_HANDLE;
1109
1110 __TRY
1111 {
1112 ret = remote_GetFeatureState(remote, szFeature, piInstalled, piAction);
1113 }
1115 {
1117 }
1118 __ENDTRY
1119
1120 return ret;
1121 }
1122
1123 ret = MSI_GetFeatureStateW(package, szFeature, piInstalled, piAction);
1124 msiobj_release( &package->hdr );
1125 return ret;
1126}
UINT MSI_GetFeatureStateW(MSIPACKAGE *package, LPCWSTR szFeature, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
Definition: install.c:1068

Referenced by MsiGetFeatureStateA(), s_remote_GetFeatureState(), and session_invoke().

◆ MsiGetFeatureValidStatesA()

UINT WINAPI MsiGetFeatureValidStatesA ( MSIHANDLE  hInstall,
const char *  szFeature,
DWORD *  pInstallState 
)

Definition at line 1648 of file install.c.

1649{
1650 UINT ret;
1651 WCHAR *szwFeature = strdupAtoW(szFeature);
1652 ret = MsiGetFeatureValidStatesW(hInstall, szwFeature, pInstallState);
1653 free(szwFeature);
1654 return ret;
1655}
UINT WINAPI MsiGetFeatureValidStatesW(MSIHANDLE hInstall, const WCHAR *szFeature, DWORD *pInstallState)
Definition: install.c:1637

◆ MsiGetFeatureValidStatesW()

UINT WINAPI MsiGetFeatureValidStatesW ( MSIHANDLE  hInstall,
const WCHAR *  szFeature,
DWORD *  pInstallState 
)

Definition at line 1637 of file install.c.

1638{
1639 if (pInstallState) *pInstallState = 1 << INSTALLSTATE_LOCAL;
1640 FIXME( "%lu, %s, %p stub returning %lu\n", hInstall, debugstr_w(szFeature), pInstallState,
1641 pInstallState ? *pInstallState : 0 );
1642 return ERROR_SUCCESS;
1643}
#define FIXME(fmt,...)
Definition: precomp.h:53

Referenced by MsiGetFeatureValidStatesA().

◆ MsiGetLanguage()

LANGID WINAPI MsiGetLanguage ( MSIHANDLE  hInstall)

Definition at line 1543 of file install.c.

1544{
1545 MSIPACKAGE* package;
1546 LANGID langid;
1547
1548 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
1549 if (!package)
1550 {
1551 MSIHANDLE remote;
1552
1553 if (!(remote = msi_get_remote(hInstall)))
1554 return ERROR_INVALID_HANDLE;
1555
1556 __TRY
1557 {
1558 langid = remote_GetLanguage(remote);
1559 }
1561 {
1562 langid = 0;
1563 }
1564 __ENDTRY
1565
1566 return langid;
1567 }
1568
1569 langid = msi_get_property_int( package->db, L"ProductLanguage", 0 );
1570 msiobj_release( &package->hdr );
1571 return langid;
1572}
USHORT LANGID
Definition: mui.h:9
LANGID langid
Definition: msctf.idl:626
int msi_get_property_int(MSIDATABASE *package, LPCWSTR prop, int def)
Definition: package.c:2337

Referenced by da_deferred(), s_remote_GetLanguage(), session_invoke(), and test_misc().

◆ MsiGetMode()

BOOL WINAPI MsiGetMode ( MSIHANDLE  hInstall,
MSIRUNMODE  iRunMode 
)

Definition at line 670 of file install.c.

671{
672 MSIPACKAGE *package;
673 BOOL r = FALSE;
674
675 TRACE( "%lu, %d\n", hInstall, iRunMode );
676
677 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
678 if (!package)
679 {
680 MSIHANDLE remote;
681
682 if (!(remote = msi_get_remote(hInstall)))
683 return FALSE;
684
685 __TRY
686 {
687 r = remote_GetMode(remote, iRunMode);
688 }
690 {
691 r = FALSE;
692 }
694
695 return r;
696 }
697
698 switch (iRunMode)
699 {
700 case MSIRUNMODE_ADMIN:
701 FIXME("no support for administrative installs\n");
702 break;
703
705 FIXME("no support for advertised installs\n");
706 break;
707
709 if (GetVersion() & 0x80000000)
710 r = TRUE;
711 break;
712
717 break;
718
720 r = package->scheduled_action_running;
721 break;
722
724 r = package->rollback_action_running;
725 break;
726
728 r = package->commit_action_running;
729 break;
730
732 r = msi_get_property_int( package->db, L"Installed", 0 ) != 0;
733 break;
734
736 r = msi_get_property_int( package->db, L"RollbackDisabled", 0 ) == 0;
737 break;
738
740 r = package->need_reboot_at_end;
741 break;
742
744 r = package->need_reboot_now;
745 break;
746
748 r = (package->log_file != INVALID_HANDLE_VALUE);
749 break;
750
751 default:
752 FIXME("unimplemented run mode: %d\n", iRunMode);
753 r = TRUE;
754 }
755
756 msiobj_release( &package->hdr );
757 return r;
758}
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
DWORD WINAPI GetVersion(void)
Definition: version.c:1458
unsigned int BOOL
Definition: ntddk_ex.h:94
@ MSIRUNMODE_SCHEDULED
Definition: msiquery.h:99
@ MSIRUNMODE_ADVERTISE
Definition: msiquery.h:84
@ MSIRUNMODE_WINDOWS9X
Definition: msiquery.h:95
@ MSIRUNMODE_RESERVED15
Definition: msiquery.h:98
@ MSIRUNMODE_MAINTENANCE
Definition: msiquery.h:85
@ MSIRUNMODE_RESERVED14
Definition: msiquery.h:97
@ MSIRUNMODE_REBOOTATEND
Definition: msiquery.h:89
@ MSIRUNMODE_REBOOTNOW
Definition: msiquery.h:90
@ MSIRUNMODE_ROLLBACK
Definition: msiquery.h:100
@ MSIRUNMODE_LOGENABLED
Definition: msiquery.h:87
@ MSIRUNMODE_OPERATIONS
Definition: msiquery.h:88
@ MSIRUNMODE_ADMIN
Definition: msiquery.h:83
@ MSIRUNMODE_COMMIT
Definition: msiquery.h:101
@ MSIRUNMODE_RESERVED11
Definition: msiquery.h:94
@ MSIRUNMODE_ROLLBACKENABLED
Definition: msiquery.h:86
unsigned char commit_action_running
Definition: msipriv.h:481
unsigned char rollback_action_running
Definition: msipriv.h:482
HANDLE log_file
Definition: msipriv.h:428
unsigned char scheduled_action_running
Definition: msipriv.h:480
unsigned char need_reboot_now
Definition: msipriv.h:484
unsigned char need_reboot_at_end
Definition: msipriv.h:483

Referenced by da_deferred(), da_immediate(), s_remote_GetMode(), and session_invoke().

◆ MsiGetSourcePathA()

UINT WINAPI MsiGetSourcePathA ( MSIHANDLE  hinst,
const char *  folder,
char *  buf,
DWORD *  sz 
)

Definition at line 409 of file install.c.

410{
411 MSIPACKAGE *package;
412 WCHAR *path, *folderW;
413 UINT r;
414
415 TRACE("%s %p %p\n", debugstr_a(folder), buf, sz);
416
417 if (!folder)
419
420 if (!(folderW = strdupAtoW(folder)))
421 return ERROR_OUTOFMEMORY;
422
423 package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
424 if (!package)
425 {
426 WCHAR *path = NULL;
427 MSIHANDLE remote;
428
429 if (!(remote = msi_get_remote(hinst)))
430 {
431 free(folderW);
433 }
434
435 __TRY
436 {
437 r = remote_GetSourcePath(remote, folderW, &path);
438 }
440 {
442 }
444
445 if (!r)
446 r = msi_strncpyWtoA(path, -1, buf, sz, TRUE);
447
449 free(folderW);
450 return r;
451 }
452
453 path = msi_resolve_source_folder(package, folderW, NULL);
454 if (path)
455 r = msi_strncpyWtoA(path, -1, buf, sz, FALSE);
456 else
458
459 free(path);
460 free(folderW);
461 msiobj_release(&package->hdr);
462 return r;
463}
UINT msi_strncpyWtoA(const WCHAR *str, int lenW, char *buf, DWORD *sz, BOOL remote)
Definition: install.c:190
static HINSTANCE hinst
Definition: edit.c:551
#define midl_user_free
Definition: rpc.h:41

Referenced by test_MsiGetSourcePath(), test_shortlongsource(), test_sourcedir(), and test_targetpath().

◆ MsiGetSourcePathW()

UINT WINAPI MsiGetSourcePathW ( MSIHANDLE  hinst,
const WCHAR *  folder,
WCHAR *  buf,
DWORD *  sz 
)

Definition at line 468 of file install.c.

469{
470 MSIPACKAGE *package;
471 WCHAR *path;
472 UINT r;
473
474 TRACE("%s %p %p\n", debugstr_w(folder), buf, sz);
475
476 if (!folder)
478
479 package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
480 if (!package)
481 {
482 WCHAR *path = NULL;
483 MSIHANDLE remote;
484
485 if (!(remote = msi_get_remote(hinst)))
487
488 __TRY
489 {
490 r = remote_GetSourcePath(remote, folder, &path);
491 }
493 {
495 }
497
498 if (!r)
499 r = msi_strncpyW(path, -1, buf, sz);
500
502 return r;
503 }
504
506 if (path)
507 r = msi_strncpyW(path, -1, buf, sz);
508 else
510
511 free(path);
512 msiobj_release(&package->hdr);
513 return r;
514}
UINT msi_strncpyW(const WCHAR *str, int len, WCHAR *buf, DWORD *sz)
Definition: install.c:213

Referenced by s_remote_GetSourcePath(), and test_targetpath().

◆ MsiGetTargetPathA()

UINT WINAPI MsiGetTargetPathA ( MSIHANDLE  hinst,
const char *  folder,
char *  buf,
DWORD *  sz 
)

Definition at line 252 of file install.c.

253{
254 MSIPACKAGE *package;
255 const WCHAR *path;
256 WCHAR *folderW;
257 UINT r;
258
259 TRACE("%s %p %p\n", debugstr_a(folder), buf, sz);
260
261 if (!folder)
263
264 if (!(folderW = strdupAtoW(folder)))
265 return ERROR_OUTOFMEMORY;
266
267 package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
268 if (!package)
269 {
270 WCHAR *path = NULL;
271 MSIHANDLE remote;
272
273 if (!(remote = msi_get_remote(hinst)))
274 {
275 free(folderW);
277 }
278
279 __TRY
280 {
281 r = remote_GetTargetPath(remote, folderW, &path);
282 }
284 {
286 }
288
289 if (!r)
290 r = msi_strncpyWtoA(path, -1, buf, sz, TRUE);
291
293 free(folderW);
294 return r;
295 }
296
297 path = msi_get_target_folder(package, folderW);
298 if (path)
299 r = msi_strncpyWtoA(path, -1, buf, sz, FALSE);
300 else
302
303 free(folderW);
304 msiobj_release(&package->hdr);
305 return r;
306}

Referenced by test_gettargetpath_bad(), test_settargetpath(), and test_targetpath().

◆ MsiGetTargetPathW()

UINT WINAPI MsiGetTargetPathW ( MSIHANDLE  hinst,
const WCHAR *  folder,
WCHAR *  buf,
DWORD *  sz 
)

Definition at line 311 of file install.c.

312{
313 MSIPACKAGE *package;
314 const WCHAR *path;
315 UINT r;
316
317 TRACE("%s %p %p\n", debugstr_w(folder), buf, sz);
318
319 if (!folder)
321
322 package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
323 if (!package)
324 {
325 WCHAR *path = NULL;
326 MSIHANDLE remote;
327
328 if (!(remote = msi_get_remote(hinst)))
330
331 __TRY
332 {
333 r = remote_GetTargetPath(remote, folder, &path);
334 }
336 {
338 }
340
341 if (!r)
342 r = msi_strncpyW(path, -1, buf, sz);
343
345 return r;
346 }
347
349 if (path)
350 r = msi_strncpyW(path, -1, buf, sz);
351 else
353
354 msiobj_release(&package->hdr);
355 return r;
356}

Referenced by s_remote_GetTargetPath(), test_gettargetpath_bad(), and test_targetpath().

◆ MsiSequenceA()

UINT WINAPI MsiSequenceA ( MSIHANDLE  hInstall,
LPCSTR  szTable,
INT  iSequenceMode 
)

Definition at line 104 of file install.c.

105{
106 LPWSTR szwTable;
107 UINT ret;
108
109 TRACE("%s, %d\n", debugstr_a(szTable), iSequenceMode);
110
111 szwTable = strdupAtoW(szTable);
112 if (szTable && !szwTable)
114
115 ret = MsiSequenceW( hInstall, szwTable, iSequenceMode );
116 free( szwTable );
117 return ret;
118}
UINT WINAPI MsiSequenceW(MSIHANDLE hInstall, LPCWSTR szTable, INT iSequenceMode)
Definition: install.c:123

Referenced by test_doaction().

◆ MsiSequenceW()

UINT WINAPI MsiSequenceW ( MSIHANDLE  hInstall,
LPCWSTR  szTable,
INT  iSequenceMode 
)

Definition at line 123 of file install.c.

124{
125 MSIPACKAGE *package;
126 UINT ret;
127
128 TRACE("%s, %d\n", debugstr_w(szTable), iSequenceMode);
129
130 if (!szTable)
132
133 package = msihandle2msiinfo( hInstall, MSIHANDLETYPE_PACKAGE );
134 if (!package)
135 {
136 MSIHANDLE remote;
137
138 if (!(remote = msi_get_remote(hInstall)))
140
141 __TRY
142 {
143 ret = remote_Sequence(remote, szTable, iSequenceMode);
144 }
146 {
148 }
150
151 return ret;
152 }
153 ret = MSI_Sequence( package, szTable );
154 msiobj_release( &package->hdr );
155 return ret;
156}
UINT MSI_Sequence(MSIPACKAGE *package, LPCWSTR table)
Definition: action.c:446

Referenced by MsiSequenceA(), and s_remote_Sequence().

◆ MsiSetComponentStateA()

UINT WINAPI MsiSetComponentStateA ( MSIHANDLE  hInstall,
LPCSTR  szComponent,
INSTALLSTATE  iState 
)

Definition at line 1382 of file install.c.

1384{
1385 UINT rc;
1386 LPWSTR szwComponent = strdupAtoW(szComponent);
1387
1388 rc = MsiSetComponentStateW(hInstall, szwComponent, iState);
1389
1390 free(szwComponent);
1391
1392 return rc;
1393}
UINT WINAPI MsiSetComponentStateW(MSIHANDLE hInstall, LPCWSTR szComponent, INSTALLSTATE iState)
Definition: install.c:1465

Referenced by test_feature_states(), test_formatrecord_tables(), test_MsiSetComponentState(), and test_removefiles().

◆ MsiSetComponentStateW()

UINT WINAPI MsiSetComponentStateW ( MSIHANDLE  hInstall,
LPCWSTR  szComponent,
INSTALLSTATE  iState 
)

Definition at line 1465 of file install.c.

1467{
1468 MSIPACKAGE* package;
1469 UINT ret;
1470
1471 if (!szComponent)
1473
1474 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
1475 if (!package)
1476 {
1477 MSIHANDLE remote;
1478
1479 if (!(remote = msi_get_remote(hInstall)))
1480 return ERROR_INVALID_HANDLE;
1481
1482 __TRY
1483 {
1484 ret = remote_SetComponentState(remote, szComponent, iState);
1485 }
1487 {
1489 }
1490 __ENDTRY
1491
1492 return ret;
1493 }
1494
1495 ret = MSI_SetComponentStateW(package, szComponent, iState);
1496 msiobj_release(&package->hdr);
1497 return ret;
1498}
static UINT MSI_SetComponentStateW(MSIPACKAGE *package, LPCWSTR szComponent, INSTALLSTATE iState)
Definition: install.c:1413

Referenced by MsiSetComponentStateA(), and s_remote_SetComponentState().

◆ MsiSetFeatureAttributesA()

UINT WINAPI MsiSetFeatureAttributesA ( MSIHANDLE  handle,
LPCSTR  feature,
DWORD  attrs 
)

Definition at line 991 of file install.c.

992{
993 UINT r;
994 WCHAR *featureW = NULL;
995
996 TRACE( "%lu, %s, %#lx\n", handle, debugstr_a(feature), attrs );
997
998 if (feature && !(featureW = strdupAtoW( feature ))) return ERROR_OUTOFMEMORY;
999
1000 r = MsiSetFeatureAttributesW( handle, featureW, attrs );
1001 free( featureW );
1002 return r;
1003}
UINT WINAPI MsiSetFeatureAttributesW(MSIHANDLE handle, LPCWSTR name, DWORD attrs)
Definition: install.c:1021

Referenced by test_MsiSetFeatureAttributes().

◆ MsiSetFeatureAttributesW()

UINT WINAPI MsiSetFeatureAttributesW ( MSIHANDLE  handle,
LPCWSTR  name,
DWORD  attrs 
)

Definition at line 1021 of file install.c.

1022{
1023 MSIPACKAGE *package;
1025 WCHAR *costing;
1026
1027 TRACE( "%lu, %s, %#lx\n", handle, debugstr_w(name), attrs );
1028
1029 if (!name || !name[0]) return ERROR_UNKNOWN_FEATURE;
1030
1031 if (!(package = msihandle2msiinfo( handle, MSIHANDLETYPE_PACKAGE )))
1032 return ERROR_INVALID_HANDLE;
1033
1034 costing = msi_dup_property( package->db, L"CostingComplete" );
1035 if (!costing || !wcscmp( costing, L"1" ))
1036 {
1037 free( costing );
1038 msiobj_release( &package->hdr );
1039 return ERROR_FUNCTION_FAILED;
1040 }
1041 free( costing );
1042 if (!(feature = msi_get_loaded_feature( package, name )))
1043 {
1044 msiobj_release( &package->hdr );
1045 return ERROR_UNKNOWN_FEATURE;
1046 }
1047 feature->Attributes = unmap_feature_attributes( attrs );
1048 msiobj_release( &package->hdr );
1049 return ERROR_SUCCESS;
1050}
static DWORD unmap_feature_attributes(DWORD attrs)
Definition: install.c:1005

Referenced by MsiSetFeatureAttributesA().

◆ MsiSetFeatureStateA()

UINT WINAPI MsiSetFeatureStateA ( MSIHANDLE  hInstall,
LPCSTR  szFeature,
INSTALLSTATE  iState 
)

Definition at line 817 of file install.c.

819{
820 LPWSTR szwFeature = NULL;
821 UINT rc;
822
823 szwFeature = strdupAtoW(szFeature);
824
825 rc = MsiSetFeatureStateW(hInstall,szwFeature, iState);
826
827 free(szwFeature);
828
829 return rc;
830}
UINT WINAPI MsiSetFeatureStateW(MSIHANDLE hInstall, LPCWSTR szFeature, INSTALLSTATE iState)
Definition: install.c:950

Referenced by test_feature_states(), and test_featureparents().

◆ MsiSetFeatureStateW()

UINT WINAPI MsiSetFeatureStateW ( MSIHANDLE  hInstall,
LPCWSTR  szFeature,
INSTALLSTATE  iState 
)

Definition at line 950 of file install.c.

952{
953 MSIPACKAGE* package;
954 UINT rc = ERROR_SUCCESS;
955
956 TRACE("%s %i\n",debugstr_w(szFeature), iState);
957
958 if (!szFeature)
960
961 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
962 if (!package)
963 {
964 MSIHANDLE remote;
965
966 if (!(remote = msi_get_remote(hInstall)))
968
969 __TRY
970 {
971 rc = remote_SetFeatureState(remote, szFeature, iState);
972 }
974 {
975 rc = GetExceptionCode();
976 }
978
979 return rc;
980 }
981
982 rc = MSI_SetFeatureStateW(package,szFeature,iState);
983
984 msiobj_release( &package->hdr );
985 return rc;
986}

Referenced by MsiSetFeatureStateA(), s_remote_SetFeatureState(), and session_invoke().

◆ MsiSetInstallLevel()

UINT WINAPI MsiSetInstallLevel ( MSIHANDLE  hInstall,
int  iInstallLevel 
)

Definition at line 1599 of file install.c.

1600{
1601 MSIPACKAGE* package;
1602 UINT r;
1603
1604 TRACE( "%lu %d\n", hInstall, iInstallLevel );
1605
1606 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
1607 if (!package)
1608 {
1609 MSIHANDLE remote;
1610
1611 if (!(remote = msi_get_remote(hInstall)))
1612 return ERROR_INVALID_HANDLE;
1613
1614 __TRY
1615 {
1616 r = remote_SetInstallLevel(remote, iInstallLevel);
1617 }
1619 {
1620 r = GetExceptionCode();
1621 }
1622 __ENDTRY
1623
1624 return r;
1625 }
1626
1627 r = MSI_SetInstallLevel( package, iInstallLevel );
1628
1629 msiobj_release( &package->hdr );
1630
1631 return r;
1632}
UINT MSI_SetInstallLevel(MSIPACKAGE *package, int iInstallLevel)
Definition: install.c:1574

Referenced by s_remote_SetInstallLevel(), session_invoke(), and test_misc().

◆ MsiSetMode()

UINT WINAPI MsiSetMode ( MSIHANDLE  hInstall,
MSIRUNMODE  iRunMode,
BOOL  fState 
)

Definition at line 763 of file install.c.

764{
765 MSIPACKAGE *package;
766 UINT r;
767
768 TRACE( "%lu, %d, %d\n", hInstall, iRunMode, fState );
769
770 package = msihandle2msiinfo( hInstall, MSIHANDLETYPE_PACKAGE );
771 if (!package)
772 {
773 MSIHANDLE remote;
774
775 if (!(remote = msi_get_remote(hInstall)))
776 return FALSE;
777
778 __TRY
779 {
780 r = remote_SetMode(remote, iRunMode, fState);
781 }
783 {
785 }
787
788 return r;
789 }
790
791 switch (iRunMode)
792 {
794 package->need_reboot_at_end = (fState != 0);
796 break;
797
799 package->need_reboot_now = (fState != 0);
801 break;
802
803 default:
805 }
806
807 msiobj_release( &package->hdr );
808 return r;
809}
#define ERROR_ACCESS_DENIED
Definition: compat.h:97

Referenced by s_remote_SetMode(), session_invoke(), and test_misc().

◆ MsiSetTargetPathA()

UINT WINAPI MsiSetTargetPathA ( MSIHANDLE  hInstall,
LPCSTR  szFolder,
LPCSTR  szFolderPath 
)

Definition at line 519 of file install.c.

521{
522 LPWSTR szwFolder = NULL, szwFolderPath = NULL;
524
525 if ( !szFolder || !szFolderPath )
527
528 szwFolder = strdupAtoW(szFolder);
529 szwFolderPath = strdupAtoW(szFolderPath);
530 if (!szwFolder || !szwFolderPath)
531 goto end;
532
533 rc = MsiSetTargetPathW( hInstall, szwFolder, szwFolderPath );
534
535end:
536 free(szwFolder);
537 free(szwFolderPath);
538
539 return rc;
540}
UINT WINAPI MsiSetTargetPathW(MSIHANDLE hInstall, LPCWSTR szFolder, LPCWSTR szFolderPath)
Definition: install.c:600
GLuint GLuint end
Definition: gl.h:1545

Referenced by test_settargetpath(), and test_targetpath().

◆ MsiSetTargetPathW()

UINT WINAPI MsiSetTargetPathW ( MSIHANDLE  hInstall,
LPCWSTR  szFolder,
LPCWSTR  szFolderPath 
)

Definition at line 600 of file install.c.

602{
603 MSIPACKAGE *package;
604 UINT ret;
605
606 TRACE("%s %s\n",debugstr_w(szFolder),debugstr_w(szFolderPath));
607
608 if ( !szFolder || !szFolderPath )
610
611 package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
612 if (!package)
613 {
614 MSIHANDLE remote;
615
616 if (!(remote = msi_get_remote(hInstall)))
618
619 __TRY
620 {
621 ret = remote_SetTargetPath(remote, szFolder, szFolderPath);
622 }
624 {
626 }
628
629 return ret;
630 }
631
632 ret = MSI_SetTargetPathW( package, szFolder, szFolderPath );
633 msiobj_release( &package->hdr );
634 return ret;
635}
UINT MSI_SetTargetPathW(MSIPACKAGE *package, LPCWSTR szFolder, LPCWSTR szFolderPath)
Definition: install.c:564

Referenced by MsiSetTargetPathA(), and s_remote_SetTargetPath().

◆ set_target_path()

static void set_target_path ( MSIPACKAGE *  package,
MSIFOLDER *  folder,
const WCHAR *  path 
)
static

Definition at line 542 of file install.c.

543{
544 FolderList *fl;
546 WCHAR *target_path;
547
548 if (!(target_path = msi_normalize_path( path ))) return;
549 if (wcscmp( target_path, folder->ResolvedTarget ))
550 {
551 free( folder->ResolvedTarget );
552 folder->ResolvedTarget = target_path;
553 msi_set_property( package->db, folder->Directory, folder->ResolvedTarget, -1 );
554
556 {
557 child = fl->folder;
558 msi_resolve_target_folder( package, child->Directory, FALSE );
559 }
560 }
561 else free( target_path );
562}
WCHAR * msi_normalize_path(const WCHAR *in)
Definition: action.c:2115
_In_ FLONG fl
Definition: winddi.h:1279

Referenced by MSI_SetTargetPathW().

◆ unmap_feature_attributes()

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msi  )