Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
c47ecd1c
Commit
c47ecd1c
authored
Nov 30, 2010
by
Hans Leidekker
Committed by
Alexandre Julliard
Nov 30, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msi: Always ignore disabled components.
parent
4881a354
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
69 additions
and
18 deletions
+69
-18
action.c
dlls/msi/action.c
+23
-14
helpers.c
dlls/msi/helpers.c
+2
-3
install.c
dlls/msi/install.c
+2
-1
package.c
dlls/msi/tests/package.c
+42
-0
No files found.
dlls/msi/action.c
View file @
c47ecd1c
...
...
@@ -1220,7 +1220,8 @@ static UINT load_component( MSIRECORD *row, LPVOID param )
comp
->
KeyPath
=
msi_dup_record_field
(
row
,
6
);
comp
->
Installed
=
INSTALLSTATE_UNKNOWN
;
msi_component_set_state
(
package
,
comp
,
INSTALLSTATE_UNKNOWN
);
comp
->
Action
=
INSTALLSTATE_UNKNOWN
;
comp
->
ActionRequest
=
INSTALLSTATE_UNKNOWN
;
comp
->
assembly
=
load_assembly
(
package
,
comp
);
return
ERROR_SUCCESS
;
...
...
@@ -1733,7 +1734,7 @@ static void ACTION_GetComponentInstallStates(MSIPACKAGE *package)
LIST_FOR_EACH_ENTRY
(
comp
,
&
package
->
components
,
MSICOMPONENT
,
entry
)
{
if
(
!
comp
->
ComponentId
)
if
(
!
comp
->
Enabled
||
!
comp
->
ComponentId
)
continue
;
if
(
state
!=
INSTALLSTATE_LOCAL
&&
state
!=
INSTALLSTATE_DEFAULT
)
...
...
@@ -1928,6 +1929,8 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
/* features with components that have compressed files are made local */
LIST_FOR_EACH_ENTRY
(
cl
,
&
feature
->
Components
,
ComponentList
,
entry
)
{
if
(
!
cl
->
component
->
Enabled
)
continue
;
if
(
cl
->
component
->
ForceLocalState
&&
feature
->
ActionRequest
==
INSTALLSTATE_SOURCE
)
{
...
...
@@ -1940,6 +1943,8 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
{
component
=
cl
->
component
;
if
(
!
component
->
Enabled
)
continue
;
switch
(
feature
->
ActionRequest
)
{
case
INSTALLSTATE_ABSENT
:
...
...
@@ -1970,6 +1975,8 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
LIST_FOR_EACH_ENTRY
(
component
,
&
package
->
components
,
MSICOMPONENT
,
entry
)
{
if
(
!
component
->
Enabled
)
continue
;
/* check if it's local or source */
if
(
!
(
component
->
Attributes
&
msidbComponentAttributesOptional
)
&&
(
component
->
hasLocalFeature
||
component
->
hasSourceFeature
))
...
...
@@ -2008,6 +2015,8 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
LIST_FOR_EACH_ENTRY
(
component
,
&
package
->
components
,
MSICOMPONENT
,
entry
)
{
if
(
!
component
->
Enabled
)
continue
;
if
(
component
->
ActionRequest
==
INSTALLSTATE_DEFAULT
)
{
TRACE
(
"%s was default, setting to local
\n
"
,
debugstr_w
(
component
->
Component
));
...
...
@@ -2283,6 +2292,18 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
msiobj_release
(
&
view
->
hdr
);
}
TRACE
(
"Evaluating component conditions
\n
"
);
LIST_FOR_EACH_ENTRY
(
comp
,
&
package
->
components
,
MSICOMPONENT
,
entry
)
{
if
(
MSI_EvaluateConditionW
(
package
,
comp
->
Condition
)
==
MSICONDITION_FALSE
)
{
TRACE
(
"Disabling component %s
\n
"
,
debugstr_w
(
comp
->
Component
));
comp
->
Enabled
=
FALSE
;
}
else
comp
->
Enabled
=
TRUE
;
}
/* read components states from the registry */
ACTION_GetComponentInstallStates
(
package
);
ACTION_GetFeatureInstallStates
(
package
);
...
...
@@ -2298,18 +2319,6 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
msiobj_release
(
&
view
->
hdr
);
}
}
TRACE
(
"Evaluating component conditions
\n
"
);
LIST_FOR_EACH_ENTRY
(
comp
,
&
package
->
components
,
MSICOMPONENT
,
entry
)
{
if
(
MSI_EvaluateConditionW
(
package
,
comp
->
Condition
)
==
MSICONDITION_FALSE
)
{
TRACE
(
"Disabling component %s
\n
"
,
debugstr_w
(
comp
->
Component
));
comp
->
Enabled
=
FALSE
;
}
else
comp
->
Enabled
=
TRUE
;
}
TRACE
(
"Calculating file install states
\n
"
);
set_file_install_states
(
package
);
...
...
dlls/msi/helpers.c
View file @
c47ecd1c
...
...
@@ -658,13 +658,12 @@ void ACTION_UpdateComponentStates(MSIPACKAGE *package, LPCWSTR szFeature)
{
MSICOMPONENT
*
component
=
cl
->
component
;
if
(
!
component
->
Enabled
)
continue
;
TRACE
(
"MODIFYING(%i): Component %s (Installed %i, Action %i, Request %i)
\n
"
,
newstate
,
debugstr_w
(
component
->
Component
),
component
->
Installed
,
component
->
Action
,
component
->
ActionRequest
);
if
(
!
component
->
Enabled
)
continue
;
if
(
newstate
==
INSTALLSTATE_LOCAL
)
msi_component_set_state
(
package
,
component
,
INSTALLSTATE_LOCAL
);
else
...
...
dlls/msi/install.c
View file @
c47ecd1c
...
...
@@ -1158,7 +1158,8 @@ static UINT MSI_SetComponentStateW(MSIPACKAGE *package, LPCWSTR szComponent,
if
(
!
comp
)
return
ERROR_UNKNOWN_COMPONENT
;
comp
->
Installed
=
iState
;
if
(
comp
->
Enabled
)
comp
->
Installed
=
iState
;
return
ERROR_SUCCESS
;
}
...
...
dlls/msi/tests/package.c
View file @
c47ecd1c
...
...
@@ -7707,6 +7707,7 @@ static void test_removefiles(void)
MSIHANDLE
hpkg
;
UINT
r
;
MSIHANDLE
hdb
;
INSTALLSTATE
installed
,
action
;
hdb
=
create_package_db
();
ok
(
hdb
,
"failed to create package database
\n
"
);
...
...
@@ -7741,6 +7742,9 @@ static void test_removefiles(void)
r
=
add_component_entry
(
hdb
,
"'carbon', '', 'TARGETDIR', 0, '', 'carbon_file'"
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot add component: %d
\n
"
,
r
);
r
=
add_component_entry
(
hdb
,
"'oxygen', '', 'TARGETDIR', 0, '0', 'oxygen_file'"
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot add component: %d
\n
"
,
r
);
r
=
create_feature_components_table
(
hdb
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot create FeatureComponents table: %d
\n
"
,
r
);
...
...
@@ -7762,6 +7766,9 @@ static void test_removefiles(void)
r
=
add_feature_components_entry
(
hdb
,
"'one', 'carbon'"
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot add feature components: %d
\n
"
,
r
);
r
=
add_feature_components_entry
(
hdb
,
"'one', 'oxygen'"
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot add feature components: %d
\n
"
,
r
);
r
=
create_file_table
(
hdb
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot create File table: %d
\n
"
,
r
);
...
...
@@ -7783,6 +7790,9 @@ static void test_removefiles(void)
r
=
add_file_entry
(
hdb
,
"'carbon_file', 'carbon', 'carbon.txt', 0, '', '1033', 16384, 1"
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot add file: %d
\n
"
,
r
);
r
=
add_file_entry
(
hdb
,
"'oxygen_file', 'oxygen', 'oxygen.txt', 0, '', '1033', 16384, 1"
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot add file: %d
\n
"
,
r
);
r
=
create_remove_file_table
(
hdb
);
ok
(
r
==
ERROR_SUCCESS
,
"cannot create Remove File table: %d
\n
"
,
r
);
...
...
@@ -7803,18 +7813,28 @@ static void test_removefiles(void)
create_test_file
(
"beryllium.txt"
);
create_test_file
(
"boron.txt"
);
create_test_file
(
"carbon.txt"
);
create_test_file
(
"oxygen.txt"
);
r
=
MsiSetProperty
(
hpkg
,
"TARGETDIR"
,
CURR_DIR
);
ok
(
r
==
ERROR_SUCCESS
,
"set property failed
\n
"
);
MsiSetInternalUI
(
INSTALLUILEVEL_NONE
,
NULL
);
r
=
MsiGetComponentState
(
hpkg
,
"oxygen"
,
&
installed
,
&
action
);
ok
(
r
==
ERROR_UNKNOWN_COMPONENT
,
"expected ERROR_UNKNOWN_COMPONENT, got %u
\n
"
,
r
);
r
=
MsiDoAction
(
hpkg
,
"CostInitialize"
);
ok
(
r
==
ERROR_SUCCESS
,
"cost init failed
\n
"
);
r
=
MsiDoAction
(
hpkg
,
"FileCost"
);
ok
(
r
==
ERROR_SUCCESS
,
"cost finalize failed
\n
"
);
installed
=
action
=
0xdeadbeef
;
r
=
MsiGetComponentState
(
hpkg
,
"oxygen"
,
&
installed
,
&
action
);
ok
(
r
==
ERROR_SUCCESS
,
"failed to get component state %u
\n
"
,
r
);
ok
(
installed
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
installed
);
ok
(
action
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
action
);
r
=
MsiDoAction
(
hpkg
,
"CostFinalize"
);
ok
(
r
==
ERROR_SUCCESS
,
"cost finalize failed
\n
"
);
...
...
@@ -7839,15 +7859,37 @@ static void test_removefiles(void)
r
=
MsiSetComponentState
(
hpkg
,
"carbon"
,
INSTALLSTATE_SOURCE
);
ok
(
r
==
ERROR_SUCCESS
,
"failed to set component state: %d
\n
"
,
r
);
installed
=
action
=
0xdeadbeef
;
r
=
MsiGetComponentState
(
hpkg
,
"oxygen"
,
&
installed
,
&
action
);
ok
(
r
==
ERROR_SUCCESS
,
"failed to get component state %u
\n
"
,
r
);
ok
(
installed
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
installed
);
ok
(
action
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
action
);
r
=
MsiSetComponentState
(
hpkg
,
"oxygen"
,
INSTALLSTATE_ABSENT
);
ok
(
r
==
ERROR_SUCCESS
,
"failed to set component state: %d
\n
"
,
r
);
installed
=
action
=
0xdeadbeef
;
r
=
MsiGetComponentState
(
hpkg
,
"oxygen"
,
&
installed
,
&
action
);
ok
(
r
==
ERROR_SUCCESS
,
"failed to get component state %u
\n
"
,
r
);
ok
(
installed
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
installed
);
ok
(
action
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
action
);
r
=
MsiDoAction
(
hpkg
,
"RemoveFiles"
);
ok
(
r
==
ERROR_SUCCESS
,
"remove files failed
\n
"
);
installed
=
action
=
0xdeadbeef
;
r
=
MsiGetComponentState
(
hpkg
,
"oxygen"
,
&
installed
,
&
action
);
ok
(
r
==
ERROR_SUCCESS
,
"failed to get component state %u
\n
"
,
r
);
ok
(
installed
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
installed
);
ok
(
action
==
INSTALLSTATE_UNKNOWN
,
"expected INSTALLSTATE_UNKNOWN, got %d
\n
"
,
action
);
ok
(
DeleteFileA
(
"hydrogen.txt"
),
"Expected hydrogen.txt to exist
\n
"
);
ok
(
DeleteFileA
(
"lithium.txt"
),
"Expected lithium.txt to exist
\n
"
);
ok
(
DeleteFileA
(
"beryllium.txt"
),
"Expected beryllium.txt to exist
\n
"
);
ok
(
DeleteFileA
(
"carbon.txt"
),
"Expected carbon.txt to exist
\n
"
);
ok
(
DeleteFileA
(
"helium.txt"
),
"Expected helium.txt to exist
\n
"
);
ok
(
DeleteFileA
(
"boron.txt"
),
"Expected boron.txt to exist
\n
"
);
ok
(
DeleteFileA
(
"oxygen.txt"
),
"Expected oxygen.txt to exist
\n
"
);
MsiCloseHandle
(
hpkg
);
DeleteFileA
(
msifile
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment