From bb40bebd2b62a8a6e8dd8fdf34aa8a3908a91a24 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 16 Mar 2011 09:22:59 +0100 Subject: [PATCH] msi: Let the InstallFiles action determine which private assembly files to install. --- dlls/msi/assembly.c | 7 +++++-- dlls/msi/files.c | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/msi/assembly.c b/dlls/msi/assembly.c index fcca6b8eb62..ad5e3a5e4e0 100644 --- a/dlls/msi/assembly.c +++ b/dlls/msi/assembly.c @@ -282,8 +282,11 @@ MSIASSEMBLY *load_assembly( MSIPACKAGE *package, MSICOMPONENT *comp ) if (a->application) { - FIXME("we should probably check the manifest file here\n"); - a->installed = (msi_get_property_int( package->db, szInstalled, 0 ) != 0); + /* We can't check the manifest here because the target path may still change. + So we assume that the assembly is not installed and lean on the InstallFiles + action to determine which files need to be installed. + */ + a->installed = FALSE; } else { diff --git a/dlls/msi/files.c b/dlls/msi/files.c index 7f71d1a4977..1f6187356e1 100644 --- a/dlls/msi/files.c +++ b/dlls/msi/files.c @@ -74,7 +74,7 @@ static msi_file_state calculate_install_state( MSIFILE *file ) TRACE("file %s is not scheduled for install\n", debugstr_w(file->File)); return msifs_skipped; } - if ((comp->assembly && !comp->assembly->installed) || + if ((comp->assembly && !comp->assembly->application && !comp->assembly->installed) || GetFileAttributesW( file->TargetPath ) == INVALID_FILE_ATTRIBUTES) { TRACE("file %s is missing\n", debugstr_w(file->File));