ReactOS 0.4.15-dev-7931-gfd331f1
install.c File Reference
#include <stdio.h>
#include <windows.h>
#include <msiquery.h>
#include <msidefs.h>
#include <msi.h>
#include <fci.h>
#include <objidl.h>
#include <srrestoreptapi.h>
#include <shlobj.h>
#include <winsvc.h>
#include <shellapi.h>
#include "wine/test.h"
#include "utils.h"
Include dependency graph for install.c:

Go to the source code of this file.

Classes

struct  sourcepathmap
 

Macros

#define _WIN32_MSI   300
 
#define COBJMACROS
 
#define MEDIA_SIZE   0x7FFFFFFF
 
#define FOLDER_THRESHOLD   900000
 
#define GET_PROC(mod, func)
 
#define create_pf(file, is_file)   create_pf_data(file, file, is_file)
 

Functions

static UINT (WINAPI *pMsiQueryComponentStateA)(LPCSTR
 
static INSTALLSTATE (WINAPI *pMsiGetComponentPathExA)(LPCSTR
 
static LONG (WINAPI *pRegDeleteKeyExA)(HKEY
 
static BOOL (WINAPI *pIsWow64Process)(HANDLE
 
static void *CDECL mem_alloc (ULONG cb)
 
static void CDECL mem_free (void *memory)
 
static BOOL CDECL get_next_cabinet (PCCAB pccab, ULONG cbPrevCab, void *pv)
 
static LONG CDECL progress (UINT typeStatus, ULONG cb1, ULONG cb2, void *pv)
 
static int CDECL file_placed (PCCAB pccab, char *pszFile, LONG cbFile, BOOL fContinuation, void *pv)
 
static INT_PTR CDECL fci_open (char *pszFile, int oflag, int pmode, int *err, void *pv)
 
static UINT CDECL fci_read (INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
 
static UINT CDECL fci_write (INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
 
static int CDECL fci_close (INT_PTR hf, int *err, void *pv)
 
static LONG CDECL fci_seek (INT_PTR hf, LONG dist, int seektype, int *err, void *pv)
 
static int CDECL fci_delete (char *pszFile, int *err, void *pv)
 
static void init_functionpointers (void)
 
BOOL is_process_limited (void)
 
static BOOL check_record (MSIHANDLE rec, UINT field, LPCSTR val)
 
static BOOL CDECL get_temp_file (char *pszTempName, int cbTempName, void *pv)
 
static INT_PTR CDECL get_open_info (char *pszName, USHORT *pdate, USHORT *ptime, USHORT *pattribs, int *err, void *pv)
 
static BOOL add_file (HFCI hfci, const char *file, TCOMP compress)
 
static void set_cab_parameters (PCCAB pCabParams, const CHAR *name, DWORD max_size)
 
void create_cab_file (const CHAR *name, DWORD max_size, const CHAR *files)
 
BOOL get_user_dirs (void)
 
BOOL get_system_dirs (void)
 
void create_file_data (LPCSTR name, LPCSTR data, DWORD size)
 
static void create_test_files (void)
 
BOOL delete_pf (const CHAR *rel_path, BOOL is_file)
 
static BOOL delete_pf_native (const CHAR *rel_path, BOOL is_file)
 
static BOOL delete_cf (const CHAR *rel_path, BOOL is_file)
 
static BOOL compare_pf_data (const char *filename, const char *data, DWORD size)
 
static void delete_test_files (void)
 
static void delete_pf_files (void)
 
static void write_file (const CHAR *filename, const char *data, int data_size)
 
static void write_msi_summary_info (MSIHANDLE db, INT version, INT wordcount, const char *template, const char *packagecode)
 
static charload_resource (const char *name)
 
static INT CALLBACK ok_callback (void *context, UINT message_type, MSIHANDLE record)
 
static void add_custom_dll (MSIHANDLE hdb)
 
void create_database_wordcount (const CHAR *name, const msi_table *tables, int num_tables, INT version, INT wordcount, const char *template, const char *packagecode)
 
static BOOL notify_system_change (DWORD event_type, STATEMGRSTATUS *status)
 
static void remove_restore_point (DWORD seq_number)
 
static LONG delete_key (HKEY key, LPCSTR subkey, REGSAM access)
 
static void test_MsiInstallProduct (void)
 
static void test_MsiSetComponentState (void)
 
static void test_packagecoltypes (void)
 
static void create_cc_test_files (void)
 
void delete_cab_files (void)
 
static void test_continuouscabs (void)
 
static void test_caborder (void)
 
static void test_mixedmedia (void)
 
static void test_samesequence (void)
 
static void test_uiLevelFlags (void)
 
static BOOL file_matches (LPSTR path)
 
static void test_readonlyfile (void)
 
static void test_readonlyfile_cab (void)
 
static void test_setdirproperty (void)
 
static void test_cabisextracted (void)
 
BOOL file_exists (const char *file)
 
BOOL pf_exists (const char *file)
 
static void delete_pfmsitest_files (void)
 
UINT run_query (MSIHANDLE hdb, MSIHANDLE hrec, const char *query)
 
static void set_transform_summary_info (void)
 
static void generate_transform (void)
 
static void generate_transform_manual (void)
 
static void test_transformprop (void)
 
static void test_currentworkingdir (void)
 
static void set_admin_summary_info (const WCHAR *name)
 
static void test_admin (void)
 
static void set_admin_property_stream (LPCSTR file)
 
static void test_adminprops (void)
 
void create_pf_data (LPCSTR file, LPCSTR data, BOOL is_file)
 
static void test_missingcab (void)
 
static void test_sourcefolder (void)
 
static void test_customaction1 (void)
 
static void test_customaction51 (void)
 
static void test_installstate (void)
 
static DWORD get_pf_file_size (LPCSTR file)
 
static void test_sourcepath (void)
 
static void test_missingcomponent (void)
 
static void test_sourcedirprop (void)
 
static void test_adminimage (void)
 
static void test_propcase (void)
 
static void test_int_widths (void)
 
static void test_shortcut (void)
 
static void test_preselected (void)
 
static void test_installed_prop (void)
 
static void test_allusers_prop (void)
 
static void process_pending_renames (HKEY hkey)
 
static BOOL file_matches_data (LPCSTR file, LPCSTR data)
 
static void test_file_in_use (void)
 
static void test_file_in_use_cab (void)
 
static void test_feature_override (void)
 
static void test_icon_table (void)
 
static void test_package_validation (void)
 
static void test_upgrade_code (void)
 
static void test_mixed_package (void)
 
static void test_volume_props (void)
 
static void test_shared_component (void)
 
static void test_remove_upgrade_code (void)
 
static void test_feature_tree (void)
 
static void check_file_matches (const char *filename, const char *text)
 
static void test_deferred_action (void)
 
static void test_wow64 (void)
 
static void test_source_resolution (void)
 
 START_TEST (install)
 

Variables

static LPCSTR
 
static MSIINSTALLCONTEXT
 
static INSTALLSTATE *static DWORD
 
static INSTALLSTATE *static LPSTR
 
static INSTALLSTATE *static LPDWORD
 
static REGSAM
 
static PBOOL
 
static STATEMGRSTATUS *static BOOL is_wow64
 
static const BOOL is_64bit = sizeof(void *) > sizeof(int)
 
static const charmsifile = "msitest.msi"
 
static const charmsifile2 = "winetest2.msi"
 
static const charmstfile = "winetest.mst"
 
static const WCHAR msifileW [] = L"msitest.msi"
 
static const WCHAR msifile2W [] = L"msitest2.msi"
 
char CURR_DIR [MAX_PATH]
 
char PROG_FILES_DIR [MAX_PATH]
 
char PROG_FILES_DIR_NATIVE [MAX_PATH]
 
char COMMON_FILES_DIR [MAX_PATH]
 
char APP_DATA_DIR [MAX_PATH]
 
char WINDOWS_DIR [MAX_PATH]
 
static const charcustomdll
 
static const CHAR component_dat []
 
static const CHAR directory_dat []
 
static const CHAR feature_dat []
 
static const CHAR feature_comp_dat []
 
static const CHAR file_dat []
 
static const CHAR install_exec_seq_dat []
 
static const CHAR media_dat []
 
static const CHAR property_dat []
 
static const CHAR aup_property_dat []
 
static const CHAR aup2_property_dat []
 
static const CHAR icon_property_dat []
 
static const CHAR shortcut_dat []
 
static const CHAR condition_dat []
 
static const CHAR up_property_dat []
 
static const CHAR up2_property_dat []
 
static const CHAR up3_property_dat []
 
static const CHAR registry_dat []
 
static const CHAR cc_component_dat []
 
static const CHAR cc2_component_dat []
 
static const CHAR cc_feature_dat []
 
static const CHAR cc_feature_comp_dat []
 
static const CHAR cc_file_dat []
 
static const CHAR cc2_file_dat []
 
static const CHAR cc_media_dat []
 
static const CHAR cc3_media_dat []
 
static const CHAR co_file_dat []
 
static const CHAR co_media_dat []
 
static const CHAR co2_media_dat []
 
static const CHAR mm_file_dat []
 
static const CHAR mm_media_dat []
 
static const CHAR ss_media_dat []
 
static const CHAR ui_component_dat []
 
static const CHAR ui_install_ui_seq_dat []
 
static const CHAR ui_custom_action_dat []
 
static const CHAR rof_component_dat []
 
static const CHAR rof_feature_dat []
 
static const CHAR rof_feature_comp_dat []
 
static const CHAR rof_file_dat []
 
static const CHAR rof_media_dat []
 
static const CHAR rofc_file_dat []
 
static const CHAR rofc_media_dat []
 
static const CHAR sdp_install_exec_seq_dat []
 
static const CHAR sdp_custom_action_dat []
 
static const CHAR pv_install_exec_seq_dat []
 
static const CHAR cie_component_dat []
 
static const CHAR cie_feature_comp_dat []
 
static const CHAR cie_file_dat []
 
static const CHAR cie_media_dat []
 
static const CHAR ci_component_dat []
 
static const CHAR ci2_feature_comp_dat []
 
static const CHAR ci2_file_dat []
 
static const CHAR pp_install_exec_seq_dat []
 
static const CHAR tp_component_dat []
 
static const CHAR cwd_component_dat []
 
static const CHAR adm_component_dat []
 
static const CHAR adm_custom_action_dat []
 
static const CHAR adm_admin_exec_seq_dat []
 
static const CHAR amp_component_dat []
 
static const CHAR rem_install_exec_seq_dat []
 
static const CHAR mc_component_dat []
 
static const CHAR mc_file_dat []
 
static const CHAR mc_media_dat []
 
static const CHAR mc_file_hash_dat []
 
static const CHAR wrv_component_dat []
 
static const CHAR ca1_install_exec_seq_dat []
 
static const CHAR ca1_custom_action_dat []
 
static const CHAR ca1_test_seq_dat []
 
static const CHAR ca1_test2_dat []
 
static const CHAR ca1__validation_dat []
 
static const CHAR ca51_component_dat []
 
static const CHAR ca51_install_exec_seq_dat []
 
static const CHAR ca51_custom_action_dat []
 
static const CHAR is_feature_dat []
 
static const CHAR is_component_dat []
 
static const CHAR is_feature_comp_dat []
 
static const CHAR is_file_dat []
 
static const CHAR is_media_dat []
 
static const CHAR sp_component_dat []
 
static const CHAR sp_directory_dat []
 
static const CHAR mcp_component_dat []
 
static const CHAR mcp_feature_dat []
 
static const CHAR mcp_feature_comp_dat []
 
static const CHAR mcp_file_dat []
 
static const CHAR ai_file_dat []
 
static const CHAR ip_install_exec_seq_dat []
 
static const CHAR ip_custom_action_dat []
 
static const CHAR aup_install_exec_seq_dat []
 
static const CHAR aup2_install_exec_seq_dat []
 
static const CHAR aup3_install_exec_seq_dat []
 
static const CHAR aup_custom_action_dat []
 
static const CHAR fo_file_dat []
 
static const CHAR fo_feature_dat []
 
static const CHAR fo_condition_dat []
 
static const CHAR fo_feature_comp_dat []
 
static const CHAR fo_component_dat []
 
static const CHAR fo_custom_action_dat []
 
static const CHAR fo_install_exec_seq_dat []
 
static const CHAR uc_file_dat []
 
static const CHAR uc_feature_dat []
 
static const CHAR uc_feature_comp_dat []
 
static const CHAR uc_component_dat []
 
static const CHAR uc_property_dat []
 
static const CHAR uc_install_exec_seq_dat []
 
static const char mixed_feature_dat []
 
static const char mixed_feature_comp_dat []
 
static const char mixed_component_dat []
 
static const char mixed_registry_dat []
 
static const char mixed_install_exec_seq_dat []
 
static const char vp_file_dat []
 
static const char vp_feature_dat []
 
static const char vp_feature_comp_dat []
 
static const char vp_component_dat []
 
static const char vp_custom_action_dat []
 
static const char vp_install_exec_seq_dat []
 
static const char shc_property_dat []
 
static const char shc2_property_dat []
 
static const char shc_file_dat []
 
static const char shc_feature_dat []
 
static const char shc_feature_comp_dat []
 
static const char shc_component_dat []
 
static const char shc_custom_action_dat []
 
static const char shc_install_exec_seq_dat []
 
static const char shc2_install_exec_seq_dat []
 
static const char ft_file_dat []
 
static const char ft_comp_dat []
 
static const char ft_feature_dat []
 
static const char ft_feature_comp_dat []
 
static const char ft_condition_dat []
 
static const char ft_custom_action_dat []
 
static const char ft_install_exec_seq_dat []
 
static const char da_custom_action_dat []
 
static const char da_install_exec_seq_dat []
 
static const CHAR x64_directory_dat []
 
static const CHAR sr_install_exec_seq_dat []
 
static const CHAR sr_custom_action_dat []
 
static const CHAR ai2_file_dat []
 
static const CHAR ai2_component_dat []
 
static const CHAR ai2_feature_dat []
 
static const CHAR ai2_feature_comp_dat []
 
static const msi_table tables []
 
static const msi_table sc_tables []
 
static const msi_table ps_tables []
 
static const msi_table up_tables []
 
static const msi_table up2_tables []
 
static const msi_table up3_tables []
 
static const msi_table up4_tables []
 
static const msi_table up5_tables []
 
static const msi_table up6_tables []
 
static const msi_table up7_tables []
 
static const msi_table cc_tables []
 
static const msi_table cc2_tables []
 
static const msi_table cc3_tables []
 
static const msi_table co_tables []
 
static const msi_table co2_tables []
 
static const msi_table mm_tables []
 
static const msi_table ss_tables []
 
static const msi_table ui_tables []
 
static const msi_table rof_tables []
 
static const msi_table rofc_tables []
 
static const msi_table sdp_tables []
 
static const msi_table cie_tables []
 
static const msi_table tp_tables []
 
static const msi_table cwd_tables []
 
static const msi_table adm_tables []
 
static const msi_table amp_tables []
 
static const msi_table mc_tables []
 
static const msi_table sf_tables []
 
static const msi_table ca1_tables []
 
static const msi_table ca51_tables []
 
static const msi_table is_tables []
 
static const msi_table sp_tables []
 
static const msi_table mcp_tables []
 
static const msi_table ai_tables []
 
static const msi_table ai2_tables []
 
static const msi_table pc_tables []
 
static const msi_table ip_tables []
 
static const msi_table aup_tables []
 
static const msi_table aup2_tables []
 
static const msi_table aup3_tables []
 
static const msi_table aup4_tables []
 
static const msi_table fiu_tables []
 
static const msi_table fiuc_tables []
 
static const msi_table fo_tables []
 
static const msi_table icon_base_tables []
 
static const msi_table pv_tables []
 
static const msi_table uc_tables []
 
static const msi_table mixed_tables []
 
static const msi_table vp_tables []
 
static const msi_table shc_tables []
 
static const msi_table shc2_tables []
 
static const msi_table ft_tables []
 
static const msi_table da_tables []
 
static const msi_table x64_tables []
 
static const msi_table sr_tables []
 
static const WCHAR name1 [] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3b6a, 0x45e4, 0x4824, 0 }
 
static const WCHAR name2 [] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3e6a, 0x44b2, 0x482f, 0 }
 
static const WCHAR name3 [] = { 0x4840, 0x4559, 0x44f2, 0x4568, 0x4737, 0 }
 
static const char data1 []
 
static const WCHAR data2 []
 
static const WCHAR data3 []
 
struct {
   LPCWSTR   name
 
   const void *   data
 
   DWORD   size
 
table_transform_data []
 
static const struct sourcepathmap spmap [256]
 
static const char session_manager [] = "System\\CurrentControlSet\\Control\\Session Manager"
 
static const char rename_ops [] = "PendingFileRenameOperations"
 

Macro Definition Documentation

◆ _WIN32_MSI

#define _WIN32_MSI   300

Definition at line 21 of file install.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file install.c.

◆ create_pf

#define create_pf (   file,
  is_file 
)    create_pf_data(file, file, is_file)

Definition at line 4063 of file install.c.

◆ FOLDER_THRESHOLD

#define FOLDER_THRESHOLD   900000

Definition at line 2122 of file install.c.

◆ GET_PROC

#define GET_PROC (   mod,
  func 
)
Value:
p ## func = (void*)GetProcAddress(mod, #func); \
if(!p ## func) \
trace("GetProcAddress(%s) failed\n", #func);
#define GetProcAddress(x, y)
Definition: compat.h:753
GLenum func
Definition: glext.h:6028
GLfloat GLfloat p
Definition: glext.h:8902
static int mod
Definition: i386-dis.c:1288

◆ MEDIA_SIZE

#define MEDIA_SIZE   0x7FFFFFFF

Definition at line 2121 of file install.c.

Function Documentation

◆ add_custom_dll()

static void add_custom_dll ( MSIHANDLE  hdb)
static

Definition at line 2676 of file install.c.

2677{
2679 UINT res;
2680
2681 if (!customdll)
2682 customdll = load_resource("custom.dll");
2683
2685
2686 res = run_query(hdb, 0, "CREATE TABLE `Binary` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NULL PRIMARY KEY `Name`)");
2687 ok(res == ERROR_SUCCESS, "failed to create Binary table: %u\n", res);
2688
2691 ok(res == ERROR_SUCCESS, "failed to add %s to stream: %u\n", customdll, res);
2692
2693 res = run_query(hdb, record, "INSERT INTO `Binary` (`Name`, `Data`) VALUES ('custom.dll', ?)");
2694 ok(res == ERROR_SUCCESS, "failed to insert into Binary table: %u\n", res);
2695
2697}
#define ok(value,...)
Definition: atltest.h:57
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
UINT WINAPI MsiCloseHandle(MSIHANDLE handle)
Definition: handle.c:269
UINT WINAPI MsiSetExternalUIRecord(INSTALLUI_HANDLER_RECORD handler, DWORD filter, void *context, INSTALLUI_HANDLER_RECORD *prev)
Definition: msi.c:4155
MSIHANDLE WINAPI MsiCreateRecord(UINT cParams)
Definition: record.c:92
UINT WINAPI MsiRecordSetStreamA(MSIHANDLE hRecord, UINT iField, const char *szFilename)
Definition: record.c:724
GLuint res
Definition: glext.h:9613
UINT run_query(MSIHANDLE hdb, MSIHANDLE hrec, const char *query)
Definition: install.c:3653
static const char * customdll
Definition: install.c:72
static char * load_resource(const char *name)
Definition: install.c:2632
static INT CALLBACK ok_callback(void *context, UINT message_type, MSIHANDLE record)
Definition: install.c:2655
@ INSTALLLOGMODE_USER
Definition: msi.h:134
unsigned int UINT
Definition: ndis.h:50
unsigned long MSIHANDLE
Definition: winemsi.idl:27

Referenced by create_database_wordcount().

◆ add_file()

static BOOL add_file ( HFCI  hfci,
const char file,
TCOMP  compress 
)
static

Definition at line 2345 of file install.c.

2346{
2347 char path[MAX_PATH];
2348 char filename[MAX_PATH];
2349
2351 lstrcatA(path, "\\");
2352 lstrcatA(path, file);
2353
2355
2358}
cd_progress_ptr progress
Definition: cdjpeg.h:152
#define FALSE
Definition: types.h:117
#define MAX_PATH
Definition: compat.h:34
BOOL __cdecl FCIAddFile(HFCI hfci, char *pszSourceFile, char *pszFileName, BOOL fExecute, PFNFCIGETNEXTCABINET pfnfcignc, PFNFCISTATUS pfnfcis, PFNFCIGETOPENINFO pfnfcigoi, TCOMP typeCompress)
Definition: fci.c:1397
const char * filename
Definition: ioapi.h:137
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:100
LPSTR WINAPI lstrcatA(LPSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:123
static char CURR_DIR[MAX_PATH]
Definition: install.c:32
static BOOL CDECL get_next_cabinet(PCCAB pccab, ULONG cbPrevCab, void *pv)
Definition: install.c:2136
static INT_PTR CDECL get_open_info(char *pszName, USHORT *pdate, USHORT *ptime, USHORT *pattribs, int *err, void *pv)
Definition: install.c:2319
int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
Definition: compress.c:68
Definition: fci.c:127

Referenced by create_cab_file(), and create_cc_test_files().

◆ BOOL()

static BOOL ( WINAPI pIsWow64Process)
static

◆ check_file_matches()

static void check_file_matches ( const char filename,
const char text 
)
static

Definition at line 6148 of file install.c.

6149{
6150 char buffer[200];
6151 HANDLE file;
6152 DWORD size;
6153
6155 ReadFile(file, buffer, sizeof(buffer), &size, NULL);
6156 ok(size == strlen(text) && !memcmp(buffer, text, size), "got %.*s\n", (int)size, buffer);
6158}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define CloseHandle
Definition: compat.h:739
#define OPEN_EXISTING
Definition: compat.h:775
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
#define CreateFileA(a, b, c, d, e, f, g)
Definition: compat.h:740
#define GENERIC_READ
Definition: compat.h:135
const WCHAR * text
Definition: package.c:1799
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
GLuint buffer
Definition: glext.h:5915

Referenced by test_deferred_action().

◆ check_record()

static BOOL check_record ( MSIHANDLE  rec,
UINT  field,
LPCSTR  val 
)
static

Definition at line 2290 of file install.c.

2291{
2292 CHAR buffer[0x20];
2293 UINT r;
2294 DWORD sz;
2295
2296 sz = sizeof buffer;
2297 r = MsiRecordGetStringA(rec, field, buffer, &sz);
2298 return (r == ERROR_SUCCESS ) && !strcmp(val, buffer);
2299}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
UINT WINAPI MsiRecordGetStringA(MSIHANDLE handle, UINT iField, char *szValue, DWORD *pcchValue)
Definition: record.c:403
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLuint GLfloat * val
Definition: glext.h:7180
Definition: parser.c:44
char CHAR
Definition: xmlstorage.h:175

◆ compare_pf_data()

static BOOL compare_pf_data ( const char filename,
const char data,
DWORD  size 
)
static

Definition at line 2541 of file install.c.

2542{
2543 DWORD read;
2544 HANDLE handle;
2545 BOOL ret = FALSE;
2546 char *buffer, path[MAX_PATH];
2547
2549 lstrcatA(path, "\\");
2551
2553 if ((buffer = malloc(size)))
2554 {
2556 if (read == size && !memcmp(data, buffer, size)) ret = TRUE;
2557 free(buffer);
2558 }
2560 return ret;
2561}
#define read
Definition: acwin.h:96
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define TRUE
Definition: types.h:120
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
unsigned int BOOL
Definition: ntddk_ex.h:94
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
char PROG_FILES_DIR[MAX_PATH]
Definition: install.c:66
int ret

Referenced by test_missingcab().

◆ create_cab_file()

void create_cab_file ( const CHAR name,
DWORD  max_size,
const CHAR files 
)

Definition at line 2373 of file install.c.

2374{
2375 CCAB cabParams;
2376 LPCSTR ptr;
2377 HFCI hfci;
2378 ERF erf;
2379 BOOL res;
2380
2381 set_cab_parameters(&cabParams, name, max_size);
2382
2385 get_temp_file, &cabParams, NULL);
2386
2387 ok(hfci != NULL, "Failed to create an FCI context\n");
2388
2389 ptr = files;
2390 while (*ptr)
2391 {
2392 res = add_file(hfci, ptr, tcompTYPE_MSZIP);
2393 ok(res, "Failed to add file: %s\n", ptr);
2394 ptr += lstrlenA(ptr) + 1;
2395 }
2396
2398 ok(res, "Failed to flush the cabinet\n");
2399
2400 res = FCIDestroy(hfci);
2401 ok(res, "Failed to destroy the cabinet\n");
2402}
static INT max_size
Definition: history.c:51
#define mem_free(ptr, bsize)
Definition: types.h:124
#define mem_alloc(bsize)
Definition: types.h:123
BOOL __cdecl FCIDestroy(HFCI hfci)
Definition: fci.c:1709
HFCI __cdecl FCICreate(PERF perf, PFNFCIFILEPLACED pfnfiledest, PFNFCIALLOC pfnalloc, PFNFCIFREE pfnfree, PFNFCIOPEN pfnopen, PFNFCIREAD pfnread, PFNFCIWRITE pfnwrite, PFNFCICLOSE pfnclose, PFNFCISEEK pfnseek, PFNFCIDELETE pfndelete, PFNFCIGETTEMPFILE pfnfcigtf, PCCAB pccab, void *pv)
Definition: fci.c:998
BOOL __cdecl FCIFlushCabinet(HFCI hfci, BOOL fGetNextCab, PFNFCIGETNEXTCABINET pfnfcignc, PFNFCISTATUS pfnfcis)
Definition: fci.c:1675
#define tcompTYPE_MSZIP
Definition: fci.h:65
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
double __cdecl erf(double)
static PVOID ptr
Definition: dispmode.c:27
static void set_cab_parameters(PCCAB pCabParams, const CHAR *name, DWORD max_size)
Definition: install.c:2360
static UINT CDECL fci_write(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
Definition: install.c:2188
static BOOL CDECL get_temp_file(char *pszTempName, int cbTempName, void *pv)
Definition: install.c:2301
static UINT CDECL fci_read(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
Definition: install.c:2176
static INT_PTR CDECL fci_open(char *pszFile, int oflag, int pmode, int *err, void *pv)
Definition: install.c:2153
static BOOL add_file(HFCI hfci, const char *file, TCOMP compress)
Definition: install.c:2345
static int CDECL fci_delete(char *pszFile, int *err, void *pv)
Definition: install.c:2219
static int CDECL file_placed(PCCAB pccab, char *pszFile, LONG cbFile, BOOL fContinuation, void *pv)
Definition: install.c:2147
static LONG CDECL fci_seek(INT_PTR hf, LONG dist, int seektype, int *err, void *pv)
Definition: install.c:2208
static int CDECL fci_close(INT_PTR hf, int *err, void *pv)
Definition: install.c:2200
Definition: fci.h:144
Definition: fci.h:44
Definition: name.c:39
const char * LPCSTR
Definition: xmlstorage.h:183

◆ create_cc_test_files()

static void create_cc_test_files ( void  )
static

Definition at line 3054 of file install.c.

3055{
3056 CCAB cabParams;
3057 HFCI hfci;
3058 ERF erf;
3059 static CHAR cab_context[] = "test%d.cab";
3060 BOOL res;
3061
3062 create_file("maximus", 500);
3063 create_file("augustus", 50000);
3064 create_file("tiberius", 500);
3065 create_file("caesar", 500);
3066
3067 set_cab_parameters(&cabParams, "test1.cab", 40000);
3068
3071 get_temp_file, &cabParams, cab_context);
3072 ok(hfci != NULL, "Failed to create an FCI context\n");
3073
3074 res = add_file(hfci, "maximus", tcompTYPE_NONE);
3075 ok(res, "Failed to add file maximus\n");
3076
3077 res = add_file(hfci, "augustus", tcompTYPE_NONE);
3078 ok(res, "Failed to add file augustus\n");
3079
3080 res = add_file(hfci, "tiberius", tcompTYPE_NONE);
3081 ok(res, "Failed to add file tiberius\n");
3082
3084 ok(res, "Failed to flush the cabinet\n");
3085
3086 res = FCIDestroy(hfci);
3087 ok(res, "Failed to destroy the cabinet\n");
3088
3089 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3090
3091 DeleteFileA("maximus");
3092 DeleteFileA("augustus");
3093 DeleteFileA("tiberius");
3094 DeleteFileA("caesar");
3095}
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
Definition: delete.c:24
#define tcompTYPE_NONE
Definition: fci.h:64
static void create_cab_file(void)
Definition: files.c:356
#define create_file(name, size)
Definition: asmcache.c:813
#define MEDIA_SIZE
Definition: install.c:2121

Referenced by test_caborder(), test_continuouscabs(), test_samesequence(), and test_uiLevelFlags().

◆ create_database_wordcount()

void create_database_wordcount ( const CHAR name,
const msi_table tables,
int  num_tables,
INT  version,
INT  wordcount,
const char template,
const char packagecode 
)

Definition at line 2699 of file install.c.

2701{
2702 MSIHANDLE db;
2703 UINT r;
2704 WCHAR *nameW;
2705 int j, len;
2706
2707 len = MultiByteToWideChar( CP_ACP, 0, name, -1, NULL, 0 );
2708 if (!(nameW = malloc( len * sizeof(WCHAR) ))) return;
2710
2712 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2713
2714 /* import the tables into the database */
2715 for (j = 0; j < num_tables; j++)
2716 {
2717 const msi_table *table = &tables[j];
2718
2719 write_file(table->filename, table->data, (table->size - 1) * sizeof(char));
2720
2721 r = MsiDatabaseImportA(db, CURR_DIR, table->filename);
2722 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2723
2724 DeleteFileA(table->filename);
2725 }
2726
2727 write_msi_summary_info(db, version, wordcount, template, packagecode);
2728 add_custom_dll(db);
2729
2730 r = MsiDatabaseCommit(db);
2731 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2732
2733 MsiCloseHandle(db);
2734 free( nameW );
2735}
static const WCHAR nameW[]
Definition: main.c:46
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
static const WCHAR version[]
Definition: asmname.c:66
UINT WINAPI MsiDatabaseImportA(MSIHANDLE handle, const char *szFolder, const char *szFilename)
Definition: database.c:853
UINT WINAPI MsiOpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIHANDLE *phDB)
Definition: database.c:298
GLenum GLsizei len
Definition: glext.h:6722
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
static const msi_table tables[]
Definition: install.c:1423
static void write_msi_summary_info(MSIHANDLE db, INT version, INT wordcount, const char *template, const char *packagecode)
Definition: install.c:2601
static void write_file(const CHAR *filename, const char *data, int data_size)
Definition: install.c:2591
static void add_custom_dll(MSIHANDLE hdb)
Definition: install.c:2676
UINT WINAPI MsiDatabaseCommit(MSIHANDLE hdb)
Definition: msiquery.c:963
#define MSIDBOPEN_CREATE
Definition: msiquery.h:69
BYTE * data
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by test_adminimage(), and test_shared_component().

◆ create_file_data()

void create_file_data ( LPCSTR  name,
LPCSTR  data,
DWORD  size 
)

Definition at line 2460 of file install.c.

2461{
2462 HANDLE file;
2463 DWORD written;
2464
2467 return;
2468
2469 WriteFile(file, data, strlen(data), &written, NULL);
2470
2471 if (size)
2472 {
2475 }
2476
2478}
#define FILE_BEGIN
Definition: compat.h:761
#define SetFilePointer
Definition: compat.h:743
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
BOOL WINAPI SetEndOfFile(HANDLE hFile)
Definition: fileinfo.c:1004
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
#define CREATE_ALWAYS
Definition: disk.h:72
#define GENERIC_WRITE
Definition: nt_native.h:90

Referenced by create_pf_data().

◆ create_pf_data()

void create_pf_data ( LPCSTR  file,
LPCSTR  data,
BOOL  is_file 
)

Definition at line 4049 of file install.c.

4050{
4052
4054 lstrcatA(path, "\\");
4055 lstrcatA(path, file);
4056
4057 if (is_file)
4058 create_file_data(path, data, 500);
4059 else
4061}
BOOL WINAPI CreateDirectoryA(IN LPCSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:37
void create_file_data(LPCSTR name, LPCSTR data, DWORD size)
Definition: install.c:2460

Referenced by test_missingcab().

◆ create_test_files()

static void create_test_files ( void  )
static

Definition at line 2480 of file install.c.

2481{
2482 CreateDirectoryA("msitest", NULL);
2483 create_file("msitest\\one.txt", 100);
2484 CreateDirectoryA("msitest\\first", NULL);
2485 create_file("msitest\\first\\two.txt", 100);
2486 CreateDirectoryA("msitest\\second", NULL);
2487 create_file("msitest\\second\\three.txt", 100);
2488
2489 create_file("four.txt", 100);
2490 create_file("five.txt", 100);
2491 create_cab_file("msitest.cab", MEDIA_SIZE, "four.txt\0five.txt\0");
2492
2493 create_file("msitest\\filename", 100);
2494
2495 DeleteFileA("four.txt");
2496 DeleteFileA("five.txt");
2497}

Referenced by test_allusers_prop(), test_customaction1(), test_feature_override(), test_installed_prop(), test_MsiInstallProduct(), test_preselected(), test_remove_upgrade_code(), test_shortcut(), test_source_resolution(), and test_wow64().

◆ delete_cab_files()

void delete_cab_files ( void  )

Definition at line 3097 of file install.c.

3098{
3099 SHFILEOPSTRUCTA shfl;
3100 CHAR path[MAX_PATH+10];
3101
3103 lstrcatA(path, "\\*.cab");
3104 path[strlen(path) + 1] = '\0';
3105
3106 shfl.hwnd = NULL;
3107 shfl.wFunc = FO_DELETE;
3108 shfl.pFrom = path;
3109 shfl.pTo = NULL;
3111
3112 SHFileOperationA(&shfl);
3113}
#define FO_DELETE
Definition: shellapi.h:138
#define FOF_FILESONLY
Definition: shellapi.h:148
#define FOF_NOCONFIRMATION
Definition: shellapi.h:145
#define FOF_SILENT
Definition: shellapi.h:143
#define FOF_NORECURSION
Definition: shlfileop.c:38
int WINAPI SHFileOperationA(LPSHFILEOPSTRUCTA lpFileOp)
Definition: shlfileop.cpp:1059
FILEOP_FLAGS fFlags
Definition: shellapi.h:349

Referenced by test_cabisextracted(), test_caborder(), test_continuouscabs(), test_file_in_use_cab(), test_lastusedsource(), test_readonlyfile_cab(), test_samesequence(), and test_uiLevelFlags().

◆ delete_cf()

static BOOL delete_cf ( const CHAR rel_path,
BOOL  is_file 
)
static

Definition at line 2527 of file install.c.

2528{
2530
2532 lstrcatA(path, "\\");
2533 lstrcatA(path, rel_path);
2534
2535 if (is_file)
2536 return DeleteFileA(path);
2537 else
2538 return RemoveDirectoryA(path);
2539}
BOOL WINAPI RemoveDirectoryA(IN LPCSTR lpPathName)
Definition: dir.c:714
char COMMON_FILES_DIR[MAX_PATH]
Definition: install.c:68

Referenced by test_setdirproperty().

◆ delete_key()

static LONG delete_key ( HKEY  key,
LPCSTR  subkey,
REGSAM  access 
)
static

Definition at line 2758 of file install.c.

2759{
2760 if (pRegDeleteKeyExA)
2761 return pRegDeleteKeyExA( key, subkey, access, 0 );
2762 return RegDeleteKeyA( key, subkey );
2763}
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
Definition: reg.c:1224
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
Definition: copy.c:22

◆ delete_pf()

◆ delete_pf_files()

static void delete_pf_files ( void  )
static

Definition at line 2576 of file install.c.

2577{
2578 ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
2579 ok(delete_pf("msitest\\cabout\\new", FALSE), "Directory not created\n");
2580 ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
2581 ok(delete_pf("msitest\\cabout", FALSE), "Directory not created\n");
2582 ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
2583 ok(delete_pf("msitest\\changed", FALSE), "Directory not created\n");
2584 ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
2585 ok(delete_pf("msitest\\first", FALSE), "Directory not created\n");
2586 ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
2587 ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
2588 ok(delete_pf("msitest", FALSE), "Directory not created\n");
2589}
BOOL delete_pf(const CHAR *rel_path, BOOL is_file)
Definition: install.c:2499

Referenced by test_adminimage(), test_allusers_prop(), test_installed_prop(), test_MsiInstallProduct(), test_shortcut(), and test_source_resolution().

◆ delete_pf_native()

static BOOL delete_pf_native ( const CHAR rel_path,
BOOL  is_file 
)
static

Definition at line 2513 of file install.c.

2514{
2516
2518 lstrcatA(path, "\\");
2519 lstrcatA(path, rel_path);
2520
2521 if (is_file)
2522 return DeleteFileA(path);
2523 else
2524 return RemoveDirectoryA(path);
2525}
char PROG_FILES_DIR_NATIVE[MAX_PATH]
Definition: install.c:67

Referenced by test_wow64().

◆ delete_pfmsitest_files()

static void delete_pfmsitest_files ( void  )
static

Definition at line 3631 of file install.c.

3632{
3633 SHFILEOPSTRUCTA shfl;
3634 CHAR path[MAX_PATH+11];
3635
3637 lstrcatA(path, "\\msitest\\*");
3638 path[strlen(path) + 1] = '\0';
3639
3640 shfl.hwnd = NULL;
3641 shfl.wFunc = FO_DELETE;
3642 shfl.pFrom = path;
3643 shfl.pTo = NULL;
3645
3646 SHFileOperationA(&shfl);
3647
3649 lstrcatA(path, "\\msitest");
3651}
#define FOF_NOERRORUI
Definition: shellapi.h:151

Referenced by test_icon_table().

◆ delete_test_files()

static void delete_test_files ( void  )
static

Definition at line 2563 of file install.c.

2564{
2565 DeleteFileA("msitest.msi");
2566 DeleteFileA("msitest.cab");
2567 DeleteFileA("msitest\\second\\three.txt");
2568 DeleteFileA("msitest\\first\\two.txt");
2569 DeleteFileA("msitest\\one.txt");
2570 DeleteFileA("msitest\\filename");
2571 RemoveDirectoryA("msitest\\second");
2572 RemoveDirectoryA("msitest\\first");
2573 RemoveDirectoryA("msitest");
2574}

Referenced by test_allusers_prop(), test_customaction1(), test_feature_override(), test_file_in_use(), test_file_in_use_cab(), test_installed_prop(), test_MsiInstallProduct(), test_preselected(), test_shortcut(), test_source_resolution(), and test_wow64().

◆ fci_close()

static int CDECL fci_close ( INT_PTR  hf,
int err,
void pv 
)
static

Definition at line 2200 of file install.c.

2201{
2202 HANDLE handle = (HANDLE)hf;
2203 ok(CloseHandle(handle), "Failed to CloseHandle\n");
2204
2205 return 0;
2206}
PVOID HANDLE
Definition: typedefs.h:73

Referenced by create_cab_file(), and create_cc_test_files().

◆ fci_delete()

static int CDECL fci_delete ( char pszFile,
int err,
void pv 
)
static

Definition at line 2219 of file install.c.

2220{
2221 BOOL ret = DeleteFileA(pszFile);
2222 ok(ret, "Failed to DeleteFile %s\n", pszFile);
2223
2224 return 0;
2225}

Referenced by create_cab_file(), and create_cc_test_files().

◆ fci_open()

static INT_PTR CDECL fci_open ( char pszFile,
int  oflag,
int  pmode,
int err,
void pv 
)
static

Definition at line 2153 of file install.c.

2154{
2155 HANDLE handle;
2156 DWORD dwAccess = 0;
2157 DWORD dwShareMode = 0;
2158 DWORD dwCreateDisposition = OPEN_EXISTING;
2159
2160 dwAccess = GENERIC_READ | GENERIC_WRITE;
2162
2164 dwCreateDisposition = OPEN_EXISTING;
2165 else
2166 dwCreateDisposition = CREATE_NEW;
2167
2168 handle = CreateFileA(pszFile, dwAccess, dwShareMode, NULL,
2169 dwCreateDisposition, 0, NULL);
2170
2171 ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszFile);
2172
2173 return (INT_PTR)handle;
2174}
#define FILE_SHARE_READ
Definition: compat.h:136
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName)
Definition: fileinfo.c:636
#define CREATE_NEW
Definition: disk.h:69
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
#define FILE_SHARE_DELETE
Definition: nt_native.h:682
int32_t INT_PTR
Definition: typedefs.h:64
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23

Referenced by create_cab_file(), and create_cc_test_files().

◆ fci_read()

static UINT CDECL fci_read ( INT_PTR  hf,
void memory,
UINT  cb,
int err,
void pv 
)
static

Definition at line 2176 of file install.c.

2177{
2178 HANDLE handle = (HANDLE)hf;
2179 DWORD dwRead;
2180 BOOL res;
2181
2182 res = ReadFile(handle, memory, cb, &dwRead, NULL);
2183 ok(res, "Failed to ReadFile\n");
2184
2185 return dwRead;
2186}
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
static char memory[1024 *256]
Definition: process.c:116

Referenced by create_cab_file(), and create_cc_test_files().

◆ fci_seek()

static LONG CDECL fci_seek ( INT_PTR  hf,
LONG  dist,
int  seektype,
int err,
void pv 
)
static

Definition at line 2208 of file install.c.

2209{
2210 HANDLE handle = (HANDLE)hf;
2211 DWORD ret;
2212
2213 ret = SetFilePointer(handle, dist, NULL, seektype);
2214 ok(ret != INVALID_SET_FILE_POINTER, "Failed to SetFilePointer\n");
2215
2216 return ret;
2217}
#define INVALID_SET_FILE_POINTER
Definition: compat.h:732

Referenced by create_cab_file(), and create_cc_test_files().

◆ fci_write()

static UINT CDECL fci_write ( INT_PTR  hf,
void memory,
UINT  cb,
int err,
void pv 
)
static

Definition at line 2188 of file install.c.

2189{
2190 HANDLE handle = (HANDLE)hf;
2191 DWORD dwWritten;
2192 BOOL res;
2193
2194 res = WriteFile(handle, memory, cb, &dwWritten, NULL);
2195 ok(res, "Failed to WriteFile\n");
2196
2197 return dwWritten;
2198}

Referenced by create_cab_file(), and create_cc_test_files().

◆ file_exists()

BOOL file_exists ( const char file)

Definition at line 3615 of file install.c.

3616{
3618}

Referenced by pf_exists(), and test_icon_table().

◆ file_matches()

static BOOL file_matches ( LPSTR  path)
static

Definition at line 3410 of file install.c.

3411{
3412 CHAR buf[MAX_PATH];
3413 HANDLE file;
3414 DWORD size;
3415
3417 NULL, OPEN_EXISTING, 0, NULL);
3419 ReadFile(file, buf, 15, &size, NULL);
3421
3422 return !lstrcmpA(buf, "msitest\\maximus");
3423}
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
int WINAPI lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:18
#define ZeroMemory
Definition: winbase.h:1712

Referenced by test_readonlyfile().

◆ file_matches_data()

static BOOL file_matches_data ( LPCSTR  file,
LPCSTR  data 
)
static

Definition at line 5323 of file install.c.

5324{
5325 DWORD len, data_len = strlen(data);
5326 HANDLE handle;
5327 char buf[128];
5328
5330 ok(handle != INVALID_HANDLE_VALUE, "failed to open %s (%lu)\n", file, GetLastError());
5331
5332 if (ReadFile(handle, buf, sizeof(buf), &len, NULL) && len >= data_len)
5333 {
5335 return !memcmp(buf, data, data_len);
5336 }
5338 return FALSE;
5339}
DWORD WINAPI GetLastError(void)
Definition: except.c:1042

Referenced by test_file_in_use(), and test_file_in_use_cab().

◆ file_placed()

static int CDECL file_placed ( PCCAB  pccab,
char pszFile,
LONG  cbFile,
BOOL  fContinuation,
void pv 
)
static

Definition at line 2147 of file install.c.

2149{
2150 return 0;
2151}

Referenced by create_cab_file(), and create_cc_test_files().

◆ generate_transform()

static void generate_transform ( void  )
static

Definition at line 3697 of file install.c.

3698{
3699 MSIHANDLE hdb1, hdb2;
3700 LPCSTR query;
3701 UINT r;
3702
3703 /* start with two identical databases */
3705
3707 ok(r == ERROR_SUCCESS , "Failed to create database\n");
3708
3709 r = MsiDatabaseCommit(hdb1);
3710 ok(r == ERROR_SUCCESS , "Failed to commit database\n");
3711
3713 ok(r == ERROR_SUCCESS , "Failed to create database\n");
3714
3715 query = "INSERT INTO `Property` ( `Property`, `Value` ) VALUES ( 'prop', 'val' )";
3716 r = run_query(hdb1, 0, query);
3717 ok(r == ERROR_SUCCESS, "failed to add property\n");
3718
3719 /* database needs to be committed */
3720 MsiDatabaseCommit(hdb1);
3721
3722 r = MsiDatabaseGenerateTransformA(hdb1, hdb2, mstfile, 0, 0);
3723 ok(r == ERROR_SUCCESS, "return code %d, should be ERROR_SUCCESS\n", r);
3724
3725 r = MsiCreateTransformSummaryInfoA(hdb2, hdb2, mstfile, 0, 0);
3726 todo_wine ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
3727
3728 MsiCloseHandle(hdb1);
3729 MsiCloseHandle(hdb2);
3730}
BOOL WINAPI CopyFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copy.c:404
UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE db, MSIHANDLE db_ref, const char *transform, int error, int validation)
Definition: suminfo.c:1239
#define todo_wine
Definition: custom.c:79
static const WCHAR msifile2W[]
Definition: install.c:63
static const WCHAR msifileW[]
Definition: install.c:62
static const char * msifile2
Definition: install.c:59
static const char * msifile
Definition: install.c:58
static const char * mstfile
Definition: install.c:60
UINT WINAPI MsiDatabaseGenerateTransformA(MSIHANDLE hdb, MSIHANDLE hdbref, const char *szTransformFile, int iReserved1, int iReserved2)
Definition: msiquery.c:949
#define MSIDBOPEN_TRANSACT
Definition: msiquery.h:67
#define MSIDBOPEN_READONLY
Definition: msiquery.h:66

Referenced by test_transformprop().

◆ generate_transform_manual()

static void generate_transform_manual ( void  )
static

Definition at line 3765 of file install.c.

3766{
3767 IStorage *stg = NULL;
3768 IStream *stm;
3769 WCHAR name[0x20];
3770 HRESULT r;
3771 DWORD i, count;
3773
3774 const CLSID CLSID_MsiTransform = { 0xc1082,0,0,{0xc0,0,0,0,0,0,0,0x46}};
3775
3776 MultiByteToWideChar(CP_ACP, 0, mstfile, -1, name, 0x20);
3777
3778 r = StgCreateDocfile(name, mode, 0, &stg);
3779 ok(r == S_OK, "failed to create storage\n");
3780 if (!stg)
3781 return;
3782
3783 r = IStorage_SetClass(stg, &CLSID_MsiTransform);
3784 ok(r == S_OK, "failed to set storage type\n");
3785
3786 for (i=0; i<ARRAY_SIZE(table_transform_data); i++)
3787 {
3788 r = IStorage_CreateStream(stg, table_transform_data[i].name,
3789 STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm);
3790 if (FAILED(r))
3791 {
3792 ok(0, "failed to create stream %#lx\n", r);
3793 continue;
3794 }
3795
3796 r = IStream_Write(stm, table_transform_data[i].data,
3799 ok(0, "failed to write stream\n");
3800 IStream_Release(stm);
3801 }
3802
3803 IStorage_Release(stg);
3804
3806}
#define ARRAY_SIZE(A)
Definition: main.h:33
HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
Definition: storage32.c:8636
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLenum mode
Definition: glext.h:6217
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
static const struct @1676 table_transform_data[]
static void set_transform_summary_info(void)
Definition: install.c:3669
#define STGM_CREATE
Definition: objbase.h:926
#define STGM_DIRECT
Definition: objbase.h:914
#define STGM_READWRITE
Definition: objbase.h:919
#define STGM_SHARE_EXCLUSIVE
Definition: objbase.h:923
#define STGM_WRITE
Definition: objbase.h:918

Referenced by test_transformprop().

◆ get_next_cabinet()

static BOOL CDECL get_next_cabinet ( PCCAB  pccab,
ULONG  cbPrevCab,
void pv 
)
static

Definition at line 2136 of file install.c.

2137{
2138 sprintf(pccab->szCab, pv, pccab->iCab);
2139 return TRUE;
2140}
#define sprintf(buf, format,...)
Definition: sprintf.c:55
int iCab
Definition: fci.h:151
char szCab[CB_MAX_CABINET_NAME]
Definition: fci.h:160

Referenced by add_file(), create_cab_file(), and create_cc_test_files().

◆ get_open_info()

static INT_PTR CDECL get_open_info ( char pszName,
USHORT pdate,
USHORT ptime,
USHORT pattribs,
int err,
void pv 
)
static

Definition at line 2319 of file install.c.

2321{
2324 HANDLE handle;
2325 DWORD attrs;
2326 BOOL res;
2327
2330
2331 ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszName);
2332
2334 ok(res, "Expected GetFileInformationByHandle to succeed\n");
2335
2337 FileTimeToDosDateTime(&filetime, pdate, ptime);
2338
2339 attrs = GetFileAttributesA(pszName);
2340 ok(attrs != INVALID_FILE_ATTRIBUTES, "Failed to GetFileAttributes\n");
2341
2342 return (INT_PTR)handle;
2343}
BOOL WINAPI GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
Definition: fileinfo.c:458
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
BOOL WINAPI FileTimeToDosDateTime(IN CONST FILETIME *lpFileTime, OUT LPWORD lpFatDate, OUT LPWORD lpFatTime)
Definition: time.c:37
#define FILE_FLAG_SEQUENTIAL_SCAN
Definition: disk.h:43

Referenced by add_file().

◆ get_pf_file_size()

static DWORD get_pf_file_size ( LPCSTR  file)
static

Definition at line 4657 of file install.c.

4658{
4660 HANDLE hfile;
4661 DWORD size;
4662
4664 lstrcatA(path, "\\");
4665 lstrcatA(path, file);
4666
4668 if (hfile == INVALID_HANDLE_VALUE)
4669 return INVALID_FILE_SIZE;
4670
4671 size = GetFileSize(hfile, NULL);
4672 CloseHandle(hfile);
4673 return size;
4674}
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
#define INVALID_FILE_SIZE
Definition: winbase.h:548

Referenced by test_sourcepath().

◆ get_system_dirs()

BOOL get_system_dirs ( void  )

Definition at line 2423 of file install.c.

2424{
2425 HKEY hkey;
2426 DWORD type, size;
2427
2428 if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion",
2429 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hkey))
2430 return FALSE;
2431
2432 size = MAX_PATH;
2433 if (RegQueryValueExA(hkey, "ProgramFilesDir (x86)", 0, &type, (LPBYTE)PROG_FILES_DIR, &size) &&
2434 RegQueryValueExA(hkey, "ProgramFilesDir", 0, &type, (LPBYTE)PROG_FILES_DIR, &size)) {
2435 RegCloseKey(hkey);
2436 return FALSE;
2437 }
2438
2439 size = MAX_PATH;
2440 if (RegQueryValueExA(hkey, "CommonFilesDir (x86)", 0, &type, (LPBYTE)COMMON_FILES_DIR, &size) &&
2441 RegQueryValueExA(hkey, "CommonFilesDir", 0, &type, (LPBYTE)COMMON_FILES_DIR, &size)) {
2442 RegCloseKey(hkey);
2443 return FALSE;
2444 }
2445
2446 size = MAX_PATH;
2447 if (RegQueryValueExA(hkey, "ProgramFilesDir", 0, &type, (LPBYTE)PROG_FILES_DIR_NATIVE, &size)) {
2448 RegCloseKey(hkey);
2449 return FALSE;
2450 }
2451
2452 RegCloseKey(hkey);
2453
2455 return FALSE;
2456
2457 return TRUE;
2458}
#define RegCloseKey(hKey)
Definition: registry.h:49
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
Definition: reg.c:3298
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
Definition: reg.c:4009
UINT WINAPI GetWindowsDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
Definition: path.c:2337
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
char WINDOWS_DIR[MAX_PATH]
Definition: install.c:70
#define KEY_QUERY_VALUE
Definition: nt_native.h:1016
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define KEY_WOW64_64KEY
Definition: cmtypes.h:46

Referenced by START_TEST().

◆ get_temp_file()

static BOOL CDECL get_temp_file ( char pszTempName,
int  cbTempName,
void pv 
)
static

Definition at line 2301 of file install.c.

2302{
2303 LPSTR tempname;
2304
2305 tempname = malloc(MAX_PATH);
2306 GetTempFileNameA(".", "xx", 0, tempname);
2307
2308 if (tempname && (strlen(tempname) < (unsigned)cbTempName))
2309 {
2310 lstrcpyA(pszTempName, tempname);
2311 free(tempname);
2312 return TRUE;
2313 }
2314
2315 free(tempname);
2316 return FALSE;
2317}
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
Definition: filename.c:26
char * LPSTR
Definition: xmlstorage.h:182

Referenced by create_cab_file(), and create_cc_test_files().

◆ get_user_dirs()

BOOL get_user_dirs ( void  )

Definition at line 2404 of file install.c.

2405{
2406 HKEY hkey;
2407 DWORD type, size;
2408
2410 "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &hkey))
2411 return FALSE;
2412
2413 size = MAX_PATH;
2414 if(RegQueryValueExA(hkey, "AppData", 0, &type, (LPBYTE)APP_DATA_DIR, &size)){
2415 RegCloseKey(hkey);
2416 return FALSE;
2417 }
2418
2419 RegCloseKey(hkey);
2420 return TRUE;
2421}
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3234
char APP_DATA_DIR[MAX_PATH]
Definition: install.c:69
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by START_TEST().

◆ init_functionpointers()

static void init_functionpointers ( void  )
static

Definition at line 2227 of file install.c.

2228{
2229 HMODULE hmsi = GetModuleHandleA("msi.dll");
2230 HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
2231 HMODULE hkernel32 = GetModuleHandleA("kernel32.dll");
2232 HMODULE hsrclient = LoadLibraryA("srclient.dll");
2233
2234#define GET_PROC(mod, func) \
2235 p ## func = (void*)GetProcAddress(mod, #func); \
2236 if(!p ## func) \
2237 trace("GetProcAddress(%s) failed\n", #func);
2238
2242
2243 GET_PROC(hadvapi32, RegDeleteKeyExA)
2247
2248 GET_PROC(hsrclient, SRRemoveRestorePoint);
2249 GET_PROC(hsrclient, SRSetRestorePointA);
2250
2251#undef GET_PROC
2252}
LONG WINAPI RegDeleteKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ REGSAM samDesired, _In_ DWORD Reserved)
Definition: reg.c:1254
#define IsWow64Process
Definition: compat.h:760
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
BOOL WINAPI Wow64RevertWow64FsRedirection(IN PVOID OldValue)
Definition: utils.c:808
BOOL WINAPI Wow64DisableWow64FsRedirection(IN PVOID *OldValue)
Definition: utils.c:785
INSTALLSTATE WINAPI MsiGetComponentPathExA(LPCSTR product, LPCSTR comp, LPCSTR usersid, MSIINSTALLCONTEXT ctx, LPSTR buf, LPDWORD buflen)
Definition: msi.c:2866
UINT WINAPI MsiQueryComponentStateA(LPCSTR szProductCode, LPCSTR szUserSid, MSIINSTALLCONTEXT dwContext, LPCSTR szComponent, INSTALLSTATE *pdwState)
Definition: msi.c:2057
UINT WINAPI MsiSourceListEnumSourcesA(const char *szProductCodeOrPatch, const char *szUserSid, MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwIndex, char *szSource, DWORD *pcchSource)
Definition: source.c:329
static HINSTANCE hkernel32
Definition: process.c:66
#define GET_PROC(mod, func)
BOOL WINAPI SRSetRestorePointA(PRESTOREPOINTINFOA pRestorePtSpec, PSTATEMGRSTATUS pSMgrStatus)
Definition: sfc.c:54
DWORD WINAPI SRRemoveRestorePoint(DWORD dwNumber)
Definition: srclient_main.c:71

Referenced by START_TEST().

◆ INSTALLSTATE()

static INSTALLSTATE ( WINAPI pMsiGetComponentPathExA)
static

◆ is_process_limited()

BOOL is_process_limited ( void  )

Definition at line 2254 of file install.c.

2255{
2257 PSID Group = NULL;
2258 BOOL IsInGroup;
2259 HANDLE token;
2260
2262 DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &Group) ||
2263 !CheckTokenMembership(NULL, Group, &IsInGroup))
2264 {
2265 trace("Could not check if the current user is an administrator\n");
2266 FreeSid(Group);
2267 return FALSE;
2268 }
2269 FreeSid(Group);
2270
2271 if (!IsInGroup)
2272 {
2273 /* Only administrators have enough privileges for these tests */
2274 return TRUE;
2275 }
2276
2278 {
2279 BOOL ret;
2281 DWORD size;
2282
2285 return (ret && type == TokenElevationTypeLimited);
2286 }
2287 return FALSE;
2288}
#define trace
Definition: atltest.h:70
static SID_IDENTIFIER_AUTHORITY NtAuthority
Definition: security.c:40
BOOL WINAPI CheckTokenMembership(IN HANDLE ExistingTokenHandle, IN PSID SidToCheck, OUT PBOOL IsMember)
Definition: token.c:21
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
Definition: security.c:411
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:294
BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD nSubAuthority0, DWORD nSubAuthority1, DWORD nSubAuthority2, DWORD nSubAuthority3, DWORD nSubAuthority4, DWORD nSubAuthority5, DWORD nSubAuthority6, DWORD nSubAuthority7, PSID *pSid)
Definition: security.c:674
PVOID WINAPI FreeSid(PSID pSid)
Definition: security.c:698
#define GetCurrentProcess()
Definition: compat.h:759
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
_In_opt_ PSID Group
Definition: rtlfuncs.h:1646
enum _TOKEN_ELEVATION_TYPE TOKEN_ELEVATION_TYPE
@ TokenElevationTypeLimited
Definition: winnt_old.h:2488
@ TokenElevationTypeDefault
Definition: winnt_old.h:2486
#define SECURITY_BUILTIN_DOMAIN_RID
Definition: setypes.h:581
#define TOKEN_QUERY
Definition: setypes.h:928
#define SECURITY_NT_AUTHORITY
Definition: setypes.h:554
@ TokenElevationType
Definition: setypes.h:983
#define DOMAIN_ALIAS_RID_ADMINS
Definition: setypes.h:652

Referenced by test_adminimage(), test_adminprops(), test_allusers_prop(), test_cabisextracted(), test_continuouscabs(), test_currentworkingdir(), test_customaction51(), test_feature_override(), test_feature_tree(), test_file_in_use(), test_file_in_use_cab(), test_icon_table(), test_installed_prop(), test_installstate(), test_missingcab(), test_missingcomponent(), test_mixed_package(), test_mixedmedia(), test_MsiInstallProduct(), test_package_validation(), test_preselected(), test_propcase(), test_readonlyfile(), test_readonlyfile_cab(), test_remove_upgrade_code(), test_setdirproperty(), test_shared_component(), test_shortcut(), test_source_resolution(), test_sourcedirprop(), test_sourcefolder(), test_transformprop(), test_upgrade_code(), test_volume_props(), and test_wow64().

◆ load_resource()

static char * load_resource ( const char name)
static

Definition at line 2632 of file install.c.

2633{
2634 static char path[MAX_PATH];
2635 DWORD written;
2636 HANDLE file;
2637 HRSRC res;
2638 void *ptr;
2639
2640 GetTempFileNameA(".", name, 0, path);
2641
2643 ok(file != INVALID_HANDLE_VALUE, "file creation failed, at %s, error %lu\n", path, GetLastError());
2644
2645 res = FindResourceA(NULL, name, "TESTDLL");
2646 ok( res != 0, "couldn't find resource\n" );
2649 ok( written == SizeofResource( GetModuleHandleA(NULL), res ), "couldn't write resource\n" );
2650 CloseHandle( file );
2651
2652 return path;
2653}
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
Definition: res.c:155
DWORD WINAPI SizeofResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:568
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532

Referenced by add_custom_dll().

◆ LONG()

static LONG ( WINAPI pRegDeleteKeyExA)
static

◆ mem_alloc()

static void *CDECL mem_alloc ( ULONG  cb)
static

Definition at line 2126 of file install.c.

2127{
2128 return malloc(cb);
2129}

◆ mem_free()

static void CDECL mem_free ( void memory)
static

Definition at line 2131 of file install.c.

2132{
2133 free(memory);
2134}

◆ notify_system_change()

static BOOL notify_system_change ( DWORD  event_type,
STATEMGRSTATUS status 
)
static

Definition at line 2737 of file install.c.

2738{
2739 RESTOREPOINTINFOA spec;
2740
2741 spec.dwEventType = event_type;
2743 spec.llSequenceNumber = status->llSequenceNumber;
2744 lstrcpyA(spec.szDescription, "msitest restore point");
2745
2746 return pSRSetRestorePointA(&spec, status);
2747}
#define APPLICATION_INSTALL
CHAR szDescription[MAX_DESC]
Definition: ps.c:97

Referenced by START_TEST().

◆ ok_callback()

static INT CALLBACK ok_callback ( void context,
UINT  message_type,
MSIHANDLE  record 
)
static

Definition at line 2655 of file install.c.

2656{
2657 if (message_type == INSTALLMESSAGE_USER)
2658 {
2659 char file[200];
2660 char msg[2000];
2661 DWORD len;
2662
2663 len = sizeof(file);
2665 len = sizeof(msg);
2667
2670
2671 return 1;
2672 }
2673 return 0;
2674}
#define ok_(x1, x2)
Definition: atltest.h:61
#define msg(x)
Definition: auth_time.c:54
return
Definition: dirsup.c:529
int WINAPI MsiRecordGetInteger(MSIHANDLE handle, UINT iField)
Definition: record.c:237
GLdouble s
Definition: gl.h:2039
#define todo_wine_if(is_todo)
Definition: custom.c:76
@ INSTALLMESSAGE_USER
Definition: msi.h:97

Referenced by add_custom_dll().

◆ pf_exists()

BOOL pf_exists ( const char file)

Definition at line 3620 of file install.c.

3621{
3623
3625 lstrcatA(path, "\\");
3626 lstrcatA(path, file);
3627
3628 return file_exists(path);
3629}
BOOL file_exists(const char *file)
Definition: install.c:3615

Referenced by test_feature_override(), test_missingcomponent(), test_shared_component(), and test_upgrade_code().

◆ process_pending_renames()

static void process_pending_renames ( HKEY  hkey)
static

Definition at line 5257 of file install.c.

5258{
5259 char *buf, *src, *dst, *buf2, *buf2ptr;
5260 DWORD size;
5261 LONG ret;
5262 BOOL found = FALSE;
5263
5265 ok(!ret, "RegQueryValueExA failed %ld\n", ret);
5266
5267 buf = malloc(size + 1);
5268 buf2ptr = buf2 = calloc(1, size + 1);
5269
5271 buf[size] = 0;
5272 ok(!ret, "RegQueryValueExA failed %ld\n", ret);
5273 if (ret) return;
5274
5275 for (src = buf; *src; src = dst + strlen(dst) + 1)
5276 {
5278 BOOL fileret;
5279
5280 dst = src + strlen(src) + 1;
5281
5282 if (!strstr(src, "msitest"))
5283 {
5284 lstrcpyA(buf2ptr, src);
5285 buf2ptr += strlen(src) + 1;
5286 lstrcpyA(buf2ptr, dst);
5287 buf2ptr += strlen(dst) + 1;
5288 continue;
5289 }
5290
5291 found = TRUE;
5292
5293 if (*dst == '!')
5294 {
5296 dst++;
5297 }
5298 if (src[0] == '\\' && src[1] == '?' && src[2] == '?' && src[3] == '\\') src += 4;
5299 if (*dst)
5300 {
5301 if (dst[0] == '\\' && dst[1] == '?' && dst[2] == '?' && dst[3] == '\\') dst += 4;
5302 fileret = MoveFileExA(src, dst, flags);
5303 ok(fileret, "Failed to move file %s -> %s (%lu)\n", src, dst, GetLastError());
5304 }
5305 else
5306 {
5307 fileret = DeleteFileA(src);
5308 ok(fileret || broken(!fileret) /* win2k3 */, "Failed to delete file %s (%lu)\n", src, GetLastError());
5309 }
5310 }
5311
5312 ok(found, "Expected a 'msitest' entry\n");
5313
5314 if (*buf2)
5315 RegSetValueExA(hkey, rename_ops, 0, REG_MULTI_SZ, (LPBYTE)buf2, buf2ptr + 1 - buf2);
5316 else
5318
5319 free(buf);
5320 free(buf2);
5321}
#define broken(x)
Definition: _sntprintf.h:21
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
Definition: reg.c:4799
LONG WINAPI RegDeleteValueA(HKEY hKey, LPCSTR lpValueName)
Definition: reg.c:2287
BOOL WINAPI MoveFileExA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName OPTIONAL, IN DWORD dwFlags)
Definition: move.c:1153
#define MOVEFILE_REPLACE_EXISTING
Definition: filesup.h:28
#define MOVEFILE_COPY_ALLOWED
Definition: filesup.h:29
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
static const char rename_ops[]
Definition: install.c:5255
#define REG_MULTI_SZ
Definition: nt_native.h:1501
long LONG
Definition: pedump.c:60
#define calloc
Definition: rosglue.h:14

Referenced by test_file_in_use(), and test_file_in_use_cab().

◆ progress()

static LONG CDECL progress ( UINT  typeStatus,
ULONG  cb1,
ULONG  cb2,
void pv 
)
static

Definition at line 2142 of file install.c.

2143{
2144 return 0;
2145}

◆ remove_restore_point()

static void remove_restore_point ( DWORD  seq_number)
static

Definition at line 2749 of file install.c.

2750{
2751 DWORD res;
2752
2753 res = pSRRemoveRestorePoint(seq_number);
2754 if (res != ERROR_SUCCESS)
2755 trace("Failed to remove the restore point: %#lx\n", res);
2756}

Referenced by START_TEST().

◆ run_query()

UINT run_query ( MSIHANDLE  hdb,
MSIHANDLE  hrec,
const char query 
)

Definition at line 3653 of file install.c.

3654{
3655 MSIHANDLE hview = 0;
3656 UINT r;
3657
3658 r = MsiDatabaseOpenViewA(hdb, query, &hview);
3659 if(r != ERROR_SUCCESS)
3660 return r;
3661
3662 r = MsiViewExecute(hview, hrec);
3663 if(r == ERROR_SUCCESS)
3664 r = MsiViewClose(hview);
3665 MsiCloseHandle(hview);
3666 return r;
3667}
UINT WINAPI MsiViewClose(MSIHANDLE hView)
Definition: msiquery.c:469
UINT WINAPI MsiViewExecute(MSIHANDLE hView, MSIHANDLE hRec)
Definition: msiquery.c:518
UINT WINAPI MsiDatabaseOpenViewA(MSIHANDLE hdb, const char *szQuery, MSIHANDLE *phView)
Definition: msiquery.c:88

Referenced by add_custom_dll(), generate_transform(), test_customaction1(), and test_icon_table().

◆ set_admin_property_stream()

static void set_admin_property_stream ( LPCSTR  file)
static

Definition at line 3987 of file install.c.

3988{
3989 IStorage *stg;
3990 IStream *stm;
3992 HRESULT hr;
3993 DWORD count;
3995
3997
3998 hr = StgOpenStorage(fileW, NULL, mode, NULL, 0, &stg);
3999 ok(hr == S_OK, "Expected S_OK, got %#lx\n", hr);
4000 if (!stg)
4001 return;
4002
4003 hr = IStorage_CreateStream(stg, L"\x41ca\x4330\x3e71\x44b5\x4233\x45f5\x422c\x4836",
4004 STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm);
4005 ok(hr == S_OK, "Expected S_OK, got %#lx\n", hr);
4006
4007 hr = IStream_Write(stm, L"MYPROP=2718 MyProp=42", sizeof(L"MYPROP=2718 MyProp=42"), &count);
4008 ok(hr == S_OK, "Expected S_OK, got %#lx\n", hr);
4009
4010 IStream_Release(stm);
4011 IStorage_Release(stg);
4012}
HRESULT WINAPI StgOpenStorage(const OLECHAR *pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen)
Definition: storage32.c:8755
static const WCHAR fileW[]
Definition: url.c:111
#define L(x)
Definition: ntvdm.h:50
HRESULT hr
Definition: shlfolder.c:183

Referenced by test_adminprops().

◆ set_admin_summary_info()

static void set_admin_summary_info ( const WCHAR name)
static

Definition at line 3920 of file install.c.

3921{
3922 MSIHANDLE db, summary;
3923 UINT r;
3924
3926 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3927
3928 r = MsiGetSummaryInformationA(db, NULL, 1, &summary);
3929 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3930
3932 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3933
3934 /* write the summary changes back to the stream */
3935 r = MsiSummaryInfoPersist(summary);
3936 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3937
3938 MsiCloseHandle(summary);
3939
3940 r = MsiDatabaseCommit(db);
3941 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3942
3943 MsiCloseHandle(db);
3944}
@ VT_I4
Definition: compat.h:2298
UINT WINAPI MsiSummaryInfoSetPropertyA(MSIHANDLE handle, UINT uiProperty, UINT uiDataType, INT iValue, FILETIME *pftValue, const char *szValue)
Definition: suminfo.c:937
UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase, const char *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
Definition: suminfo.c:584
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE handle)
Definition: suminfo.c:1222
#define PID_WORDCOUNT
Definition: suminfo.c:57
#define MSIDBOPEN_DIRECT
Definition: msiquery.h:68

Referenced by test_admin(), and test_adminprops().

◆ set_cab_parameters()

static void set_cab_parameters ( PCCAB  pCabParams,
const CHAR name,
DWORD  max_size 
)
static

Definition at line 2360 of file install.c.

2361{
2362 ZeroMemory(pCabParams, sizeof(CCAB));
2363
2364 pCabParams->cb = max_size;
2365 pCabParams->cbFolderThresh = FOLDER_THRESHOLD;
2366 pCabParams->setID = 0xbeef;
2367 pCabParams->iCab = 1;
2368 lstrcpyA(pCabParams->szCabPath, CURR_DIR);
2369 lstrcatA(pCabParams->szCabPath, "\\");
2370 lstrcpyA(pCabParams->szCab, name);
2371}
#define FOLDER_THRESHOLD
Definition: install.c:2122
ULONG cbFolderThresh
Definition: fci.h:146
USHORT setID
Definition: fci.h:157
char szCabPath[CB_MAX_CAB_PATH]
Definition: fci.h:161
ULONG cb
Definition: fci.h:145

Referenced by create_cab_file(), and create_cc_test_files().

◆ set_transform_summary_info()

static void set_transform_summary_info ( void  )
static

Definition at line 3669 of file install.c.

3670{
3671 UINT r;
3672 MSIHANDLE suminfo = 0;
3673
3674 /* build summary info */
3676 ok(r == ERROR_SUCCESS , "Failed to open summaryinfo\n");
3677
3679 ok(r == ERROR_SUCCESS, "Failed to set summary info\n");
3680
3682 "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}1.1.1;"
3683 "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}1.1.1;"
3684 "{4C0EAA15-0264-4E5A-8758-609EF142B92D}");
3685 ok(r == ERROR_SUCCESS , "Failed to set summary info\n");
3686
3688 ok(r == ERROR_SUCCESS, "Failed to set summary info\n");
3689
3691 ok(r == ERROR_SUCCESS , "Failed to make summary info persist\n");
3692
3694 ok(r == ERROR_SUCCESS , "Failed to close suminfo\n");
3695}
static const CHAR suminfo[]
Definition: db.c:2206
@ VT_LPSTR
Definition: compat.h:2324
#define PID_PAGECOUNT
Definition: suminfo.c:56
#define PID_TITLE
Definition: suminfo.c:44
#define PID_REVNUMBER
Definition: suminfo.c:51

Referenced by generate_transform_manual().

◆ START_TEST()

START_TEST ( install  )

Definition at line 6278 of file install.c.

6279{
6280 DWORD len;
6281 char temp_path[MAX_PATH], prev_path[MAX_PATH], log_file[MAX_PATH];
6283 BOOL ret = FALSE;
6284
6286 subtest("custom");
6287
6288 if (pIsWow64Process)
6289 pIsWow64Process(GetCurrentProcess(), &is_wow64);
6290
6291 GetCurrentDirectoryA(MAX_PATH, prev_path);
6294
6297
6298 if(len && (CURR_DIR[len - 1] == '\\'))
6299 CURR_DIR[len - 1] = 0;
6300
6301 ok(get_system_dirs(), "failed to retrieve system dirs\n");
6302 ok(get_user_dirs(), "failed to retrieve user dirs\n");
6303
6304 /* Create a restore point ourselves so we circumvent the multitude of restore points
6305 * that would have been created by all the installation and removal tests.
6306 *
6307 * This is not needed on version 5.0 where setting MSIFASTINSTALL prevents the
6308 * creation of restore points.
6309 */
6310 if (pSRSetRestorePointA && !pMsiGetComponentPathExA)
6311 {
6312 memset(&status, 0, sizeof(status));
6314 }
6315
6316 /* Create only one log file and don't append. We have to pass something
6317 * for the log mode for this to work. The logfile needs to have an absolute
6318 * path otherwise we still end up with some extra logfiles as some tests
6319 * change the current directory.
6320 */
6322 lstrcatA(log_file, "\\msitest.log");
6324
6325 if (pSRSetRestorePointA) /* test has side-effects on win2k3 that cause failures in following tests */
6330 test_caborder();
6340 test_admin();
6351 test_propcase();
6353 test_shortcut();
6369 test_wow64();
6371
6373
6375
6376 if (pSRSetRestorePointA && !pMsiGetComponentPathExA && ret)
6377 {
6379 if (ret)
6380 remove_restore_point(status.llSequenceNumber);
6381 }
6382
6383 SetCurrentDirectoryA(prev_path);
6384}
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
Definition: path.c:2146
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
Definition: path.c:2206
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
Definition: path.c:2054
UINT WINAPI MsiEnableLogA(DWORD dwLogMode, const char *szLogFile, DWORD attributes)
Definition: msi.c:1884
UNICODE_STRING log_file
Definition: btrfs.c:89
static void test_volume_props(void)
Definition: install.c:5998
static void remove_restore_point(DWORD seq_number)
Definition: install.c:2749
static void test_shared_component(void)
Definition: install.c:6024
static void test_sourcedirprop(void)
Definition: install.c:4812
static BOOL notify_system_change(DWORD event_type, STATEMGRSTATUS *status)
Definition: install.c:2737
static void test_packagecoltypes(void)
Definition: install.c:2999
static void test_upgrade_code(void)
Definition: install.c:5813
static void test_continuouscabs(void)
Definition: install.c:3115
static void test_sourcepath(void)
Definition: install.c:4676
static void test_propcase(void)
Definition: install.c:4935
static void test_remove_upgrade_code(void)
Definition: install.c:6068
static void test_int_widths(void)
Definition: install.c:4978
static void test_admin(void)
Definition: install.c:3946
static void test_icon_table(void)
Definition: install.c:5540
static void test_uiLevelFlags(void)
Definition: install.c:3380
static void test_installed_prop(void)
Definition: install.c:5143
static void test_setdirproperty(void)
Definition: install.c:3534
static void test_allusers_prop(void)
Definition: install.c:5183
static void test_customaction1(void)
Definition: install.c:4181
BOOL get_user_dirs(void)
Definition: install.c:2404
static void test_preselected(void)
Definition: install.c:5088
static void test_file_in_use(void)
Definition: install.c:5341
static void test_wow64(void)
Definition: install.c:6189
BOOL get_system_dirs(void)
Definition: install.c:2423
static void test_feature_tree(void)
Definition: install.c:6119
static void test_MsiSetComponentState(void)
Definition: install.c:2950
static void test_adminprops(void)
Definition: install.c:4014
static void init_functionpointers(void)
Definition: install.c:2227
static void test_currentworkingdir(void)
Definition: install.c:3854
static void test_adminimage(void)
Definition: install.c:4864
static void test_deferred_action(void)
Definition: install.c:6160
static void test_samesequence(void)
Definition: install.c:3351
static void test_MsiInstallProduct(void)
Definition: install.c:2765
static void test_transformprop(void)
Definition: install.c:3808
static void test_readonlyfile_cab(void)
Definition: install.c:3473
static void test_package_validation(void)
Definition: install.c:5622
static void test_sourcefolder(void)
Definition: install.c:4135
static void test_file_in_use_cab(void)
Definition: install.c:5400
static void test_cabisextracted(void)
Definition: install.c:3567
static void test_mixedmedia(void)
Definition: install.c:3308
static void test_feature_override(void)
Definition: install.c:5463
static void test_installstate(void)
Definition: install.c:4271
static void test_shortcut(void)
Definition: install.c:5040
static void test_caborder(void)
Definition: install.c:3222
static void test_customaction51(void)
Definition: install.c:4238
static void test_readonlyfile(void)
Definition: install.c:3425
static void test_missingcomponent(void)
Definition: install.c:4757
static void test_mixed_package(void)
Definition: install.c:5845
static void test_source_resolution(void)
Definition: install.c:6249
static STATEMGRSTATUS *static BOOL is_wow64
Definition: install.c:55
static void test_missingcab(void)
Definition: install.c:4065
@ INSTALLLOGMODE_FATALEXIT
Definition: msi.h:131
char temp_path[MAX_PATH]
Definition: mspatcha.c:123
#define subtest
Definition: test.h:157
#define memset(x, y, z)
Definition: compat.h:39
#define BEGIN_NESTED_SYSTEM_CHANGE
#define END_NESTED_SYSTEM_CHANGE

◆ test_admin()

static void test_admin ( void  )
static

Definition at line 3946 of file install.c.

3947{
3948 UINT r;
3949
3950 CreateDirectoryA("msitest", NULL);
3951 create_file("msitest\\augustus", 500);
3952
3955
3957
3960 {
3961 skip("Not enough rights to perform tests\n");
3962 goto error;
3963 }
3964 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3965 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3966 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3967 ok(!DeleteFileA("c:\\msitest\\augustus"), "File installed\n");
3968 ok(!RemoveDirectoryA("c:\\msitest"), "File installed\n");
3969
3970 r = MsiInstallProductA(msifile, "ACTION=ADMIN");
3971 todo_wine
3972 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3973 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3974 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3975 todo_wine
3976 {
3977 ok(DeleteFileA("c:\\msitest\\augustus"), "File not installed\n");
3978 ok(RemoveDirectoryA("c:\\msitest"), "File not installed\n");
3979 }
3980
3981error:
3983 DeleteFileA("msitest\\augustus");
3984 RemoveDirectoryA("msitest");
3985}
#define skip(...)
Definition: atltest.h:64
UINT WINAPI MsiInstallProductA(LPCSTR szPackagePath, LPCSTR szCommandLine)
Definition: msi.c:200
INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL dwUILevel, HWND *phWnd)
Definition: msi.c:2284
#define error(str)
Definition: mkdosfs.c:1605
static void set_admin_summary_info(const WCHAR *name)
Definition: install.c:3920
static const msi_table adm_tables[]
Definition: install.c:1724
#define create_database(name, tables, num_tables)
Definition: utils.h:42
@ INSTALLUILEVEL_NONE
Definition: msi.h:66
#define ERROR_INSTALL_PACKAGE_REJECTED
Definition: winerror.h:983

Referenced by START_TEST().

◆ test_adminimage()

static void test_adminimage ( void  )
static

Definition at line 4864 of file install.c.

4865{
4866 UINT r;
4867
4868 if (is_process_limited())
4869 {
4870 skip("process is limited\n");
4871 return;
4872 }
4873
4874 CreateDirectoryA("msitest", NULL);
4875 CreateDirectoryA("msitest\\first", NULL);
4876 CreateDirectoryA("msitest\\second", NULL);
4877 CreateDirectoryA("msitest\\cabout", NULL);
4878 CreateDirectoryA("msitest\\cabout\\new", NULL);
4879 create_file("msitest\\one.txt", 100);
4880 create_file("msitest\\first\\two.txt", 100);
4881 create_file("msitest\\second\\three.txt", 100);
4882 create_file("msitest\\cabout\\four.txt", 100);
4883 create_file("msitest\\cabout\\new\\five.txt", 100);
4884 create_file("msitest\\filename", 100);
4885
4888 "{004757CA-5092-49C2-AD20-28E1CE0DF5F2}");
4889
4891
4894 {
4895 skip("Not enough rights to perform tests\n");
4896 goto error;
4897 }
4898 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4899
4901
4902 create_file("four.txt", 100);
4903 create_file("five.txt", 100);
4904 create_cab_file("msitest.cab", MEDIA_SIZE, "four.txt\0five.txt\0");
4907 ";1033", "{004757CA-5092-49C2-AD20-28E1CE0DF5F2}");
4908
4910
4912 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4913
4914 ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
4915 ok(delete_pf("msitest\\cabout\\new", FALSE), "Directory not created\n");
4916 ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
4917 ok(delete_pf("msitest\\cabout", FALSE), "Directory not created\n");
4918 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4919
4920error:
4921 DeleteFileA("msifile");
4922 DeleteFileA("msitest\\cabout\\new\\five.txt");
4923 DeleteFileA("msitest\\cabout\\four.txt");
4924 DeleteFileA("msitest\\second\\three.txt");
4925 DeleteFileA("msitest\\first\\two.txt");
4926 DeleteFileA("msitest\\one.txt");
4927 DeleteFileA("msitest\\filename");
4928 RemoveDirectoryA("msitest\\cabout\\new");
4929 RemoveDirectoryA("msitest\\cabout");
4930 RemoveDirectoryA("msitest\\second");
4931 RemoveDirectoryA("msitest\\first");
4932 RemoveDirectoryA("msitest");
4933}
BOOL is_process_limited(void)
Definition: install.c:2254
static void delete_pf_files(void)
Definition: install.c:2576
static const msi_table ai2_tables[]
Definition: install.c:1852
static const msi_table ai_tables[]
Definition: install.c:1840
void create_database_wordcount(const CHAR *name, const msi_table *tables, int num_tables, INT version, INT wordcount, const char *template, const char *packagecode)
Definition: install.c:2699
@ msidbSumInfoSourceTypeAdminImage
Definition: msidefs.h:223
@ msidbSumInfoSourceTypeCompressed
Definition: msidefs.h:222

Referenced by START_TEST().

◆ test_adminprops()

static void test_adminprops ( void  )
static

Definition at line 4014 of file install.c.

4015{
4016 UINT r;
4017
4018 if (is_process_limited())
4019 {
4020 skip("process is limited\n");
4021 return;
4022 }
4023
4024 CreateDirectoryA("msitest", NULL);
4025 create_file("msitest\\augustus", 500);
4026
4030
4032
4035 {
4036 skip("Not enough rights to perform tests\n");
4037 goto error;
4038 }
4039 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4040 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
4041 ok(delete_pf("msitest", FALSE), "Directory created\n");
4042
4043error:
4045 DeleteFileA("msitest\\augustus");
4046 RemoveDirectoryA("msitest");
4047}
static const msi_table amp_tables[]
Definition: install.c:1738
static void set_admin_property_stream(LPCSTR file)
Definition: install.c:3987

Referenced by START_TEST().

◆ test_allusers_prop()

static void test_allusers_prop ( void  )
static

Definition at line 5183 of file install.c.

5184{
5185 UINT r;
5186
5187 if (is_process_limited())
5188 {
5189 skip("process is limited\n");
5190 return;
5191 }
5192
5195
5197
5198 /* ALLUSERS property unset */
5199 r = MsiInstallProductA(msifile, "FULL=1");
5201 {
5202 skip("Not enough rights to perform tests\n");
5203 goto error;
5204 }
5205 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5206
5208
5209 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5210 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5211
5213
5216
5217 /* ALLUSERS property set to 1 */
5218 r = MsiInstallProductA(msifile, "FULL=1");
5219 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5220
5222
5223 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5224 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5225
5227
5230
5231 /* ALLUSERS property set to 2 */
5232 r = MsiInstallProductA(msifile, "FULL=1");
5233 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5234
5236
5237 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5238 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5239
5241
5244
5245 /* ALLUSERS property set to 2, conditioned on ALLUSERS = 1 */
5246 r = MsiInstallProductA(msifile, "FULL=1");
5247 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
5248
5249error:
5252}
static const msi_table aup2_tables[]
Definition: install.c:1902
static void delete_test_files(void)
Definition: install.c:2563
static const msi_table aup4_tables[]
Definition: install.c:1928
static void create_test_files(void)
Definition: install.c:2480
static const msi_table aup3_tables[]
Definition: install.c:1915
static const msi_table aup_tables[]
Definition: install.c:1889
#define ERROR_INSTALL_FAILURE
Definition: winerror.h:961

Referenced by START_TEST().

◆ test_cabisextracted()

static void test_cabisextracted ( void  )
static

Definition at line 3567 of file install.c.

3568{
3569 UINT r;
3570
3571 if (is_process_limited())
3572 {
3573 skip("process is limited\n");
3574 return;
3575 }
3576
3577 CreateDirectoryA("msitest", NULL);
3578 create_file("msitest\\gaius", 500);
3579 create_file("maximus", 500);
3580 create_file("augustus", 500);
3581 create_file("caesar", 500);
3582
3583 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3584 create_cab_file("test2.cab", MEDIA_SIZE, "augustus\0");
3585 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3586
3588
3590
3593 {
3594 skip("Not enough rights to perform tests\n");
3595 goto error;
3596 }
3597 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3598 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3599 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3600 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3601 ok(delete_pf("msitest\\gaius", TRUE), "File not installed\n");
3602 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3603
3604error:
3605 /* Delete the files in the temp (current) folder */
3608 DeleteFileA("maximus");
3609 DeleteFileA("augustus");
3610 DeleteFileA("caesar");
3611 DeleteFileA("msitest\\gaius");
3612 RemoveDirectoryA("msitest");
3613}
static const msi_table cie_tables[]
Definition: install.c:1688
void delete_cab_files(void)
Definition: install.c:3097

Referenced by START_TEST().

◆ test_caborder()

static void test_caborder ( void  )
static

Definition at line 3222 of file install.c.

3223{
3224 UINT r;
3225
3226 create_file("imperator", 100);
3227 create_file("maximus", 500);
3228 create_file("augustus", 50000);
3229 create_file("caesar", 500);
3230
3232
3234
3235 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3236 create_cab_file("test2.cab", MEDIA_SIZE, "augustus\0");
3237 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3238
3241 {
3242 skip("Not enough rights to perform tests\n");
3243 goto error;
3244 }
3245 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3246 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3247 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3248 todo_wine
3249 {
3250 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3251 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3252 }
3253
3255
3256 create_cab_file("test1.cab", MEDIA_SIZE, "imperator\0");
3257 create_cab_file("test2.cab", MEDIA_SIZE, "maximus\0augustus\0");
3258 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3259
3261 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3262 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3263 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3264 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3265 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3266
3269
3272
3274 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3275 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3276 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3277 todo_wine
3278 {
3279 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3280 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3281 }
3282
3285
3288
3290 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3291 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3292 todo_wine
3293 {
3294 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3295 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3296 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3297 }
3298
3299error:
3301 DeleteFileA("imperator");
3302 DeleteFileA("maximus");
3303 DeleteFileA("augustus");
3304 DeleteFileA("caesar");
3306}
static const msi_table cc_tables[]
Definition: install.c:1553
static void create_cc_test_files(void)
Definition: install.c:3054
static const msi_table co_tables[]
Definition: install.c:1589
static const msi_table co2_tables[]
Definition: install.c:1601

Referenced by START_TEST().

◆ test_continuouscabs()

static void test_continuouscabs ( void  )
static

Definition at line 3115 of file install.c.

3116{
3117 UINT r;
3118
3119 if (is_process_limited())
3120 {
3121 skip("process is limited\n");
3122 return;
3123 }
3124
3127
3129
3132 {
3133 skip("Not enough rights to perform tests\n");
3134 goto error;
3135 }
3136 else
3137 {
3138 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3139 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3140 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3141 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3142 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3143 }
3144
3147
3150
3152
3155 {
3156 skip("Not enough rights to perform tests\n");
3157 }
3158 else
3159 {
3160 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3161 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3162 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3163 ok(delete_pf("msitest\\tiberius", TRUE), "File not installed\n");
3164 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3165 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3166 }
3167
3170
3171 /* Tests to show that only msi cab filename is taken in case of mismatch with the one given by previous cab */
3172
3173 /* Filename from cab is right and the one from msi is wrong */
3176
3178
3181 {
3182 skip("Not enough rights to perform tests\n");
3183 }
3184 else
3185 {
3186 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3187 todo_wine ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3188 ok(!delete_pf("msitest\\caesar", TRUE), "File installed\n");
3189 todo_wine ok(!delete_pf("msitest\\maximus", TRUE), "File installed\n");
3190 todo_wine ok(!delete_pf("msitest", FALSE), "Directory created\n");
3191 }
3192
3195
3196 /* Filename from msi is right and the one from cab is wrong */
3198 ok(MoveFileA("test2.cab", "test2_.cab"), "Cannot rename test2.cab to test2_.cab\n");
3200
3202
3205 {
3206 skip("Not enough rights to perform tests\n");
3207 }
3208 else
3209 {
3210 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3211 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3212 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3213 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3214 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3215 }
3216
3217error:
3220}
BOOL WINAPI MoveFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName)
Definition: move.c:1137
static const msi_table cc3_tables[]
Definition: install.c:1577
static const msi_table cc2_tables[]
Definition: install.c:1565

Referenced by START_TEST().

◆ test_currentworkingdir()

static void test_currentworkingdir ( void  )
static

Definition at line 3854 of file install.c.

3855{
3856 UINT r;
3858 LPSTR ptr;
3859
3860 if (is_process_limited())
3861 {
3862 skip("process is limited\n");
3863 return;
3864 }
3865
3866 CreateDirectoryA("msitest", NULL);
3867 create_file("msitest\\augustus", 500);
3868
3870
3872
3873 CreateDirectoryA("diffdir", NULL);
3874 SetCurrentDirectoryA("diffdir");
3875
3876 sprintf(path, "..\\%s", msifile);
3878 todo_wine
3879 {
3880 ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
3881 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3882 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3883 }
3884
3885 sprintf(path, "%s\\%s", CURR_DIR, msifile);
3888 {
3889 skip("Not enough rights to perform tests\n");
3890 goto error;
3891 }
3892 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3893 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3894 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3895
3897 drive[2] = '\\';
3898 drive[3] = '\0';
3900
3902 if (path[lstrlenA(path) - 1] != '\\') lstrcatA(path, "\\");
3904 ptr = strchr(path, ':');
3905 ptr +=2;
3906
3908 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3909 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3910 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3911
3912error:
3915 DeleteFileA("msitest\\augustus");
3916 RemoveDirectoryA("msitest");
3917 RemoveDirectoryA("diffdir");
3918}
char * strchr(const char *String, int ch)
Definition: utclib.c:501
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static const msi_table cwd_tables[]
Definition: install.c:1712

Referenced by START_TEST().

◆ test_customaction1()

static void test_customaction1 ( void  )
static

Definition at line 4181 of file install.c.

4182{
4183 MSIHANDLE hdb, record;
4184 UINT r;
4185
4188
4189 /* create a test table */
4191 run_query(hdb, 0, "CREATE TABLE `Test` (`Name` CHAR(10), `Number` INTEGER, `Data` OBJECT PRIMARY KEY `Name`)");
4192 create_file("unus", 10);
4193 create_file("duo", 10);
4195 MsiRecordSetStreamA(record, 1, "unus");
4196 run_query(hdb, record, "INSERT INTO `Test` (`Name`, `Number`, `Data`) VALUES ('one', 1, ?)");
4197 MsiRecordSetStreamA(record, 1, "duo");
4198 run_query(hdb, record, "INSERT INTO `Test` (`Name`, `Number`, `Data`) VALUES ('two', 2, ?)");
4199 MsiDatabaseCommit(hdb);
4200 MsiCloseHandle(hdb);
4201
4203
4204 r = MsiInstallProductA(msifile, "MAIN_TEST=1");
4205 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4206
4207 /* Test return values */
4208 r = MsiInstallProductA(msifile, "TEST_RETVAL=0");
4209 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4210
4211 r = MsiInstallProductA(msifile, "TEST_RETVAL=1626"); /* ERROR_FUNCTION_NOT_CALLED */
4212 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4213
4214 r = MsiInstallProductA(msifile, "TEST_RETVAL=1602");
4215 ok(r == ERROR_INSTALL_USEREXIT, "Expected ERROR_INSTALL_USEREXIT, got %u\n", r);
4216
4217 r = MsiInstallProductA(msifile, "TEST_RETVAL=259"); /* ERROR_NO_MORE_ITEMS */
4218 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4219
4220 /* any other error maps to ERROR_INSTALL_FAILURE */
4221 r = MsiInstallProductA(msifile, "TEST_RETVAL=1");
4222 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4223
4224 /* Custom actions execute in the same process, but they don't retain state */
4225 r = MsiInstallProductA(msifile, "TEST_PROCESS=1");
4226 ok(!r, "got %u\n", r);
4227
4228 /* test asynchronous actions (msidbCustomActionTypeAsync) */
4229 r = MsiInstallProductA(msifile, "TEST_ASYNC=1");
4230 ok(!r, "got %u\n", r);
4231
4234 DeleteFileA("unus");
4235 DeleteFileA("duo");
4236}
static const msi_table ca1_tables[]
Definition: install.c:1775
#define ERROR_INSTALL_USEREXIT
Definition: winerror.h:960

Referenced by START_TEST().

◆ test_customaction51()

static void test_customaction51 ( void  )
static

Definition at line 4238 of file install.c.

4239{
4240 UINT r;
4241
4242 if (is_process_limited())
4243 {
4244 skip("process is limited\n");
4245 return;
4246 }
4247
4248 CreateDirectoryA("msitest", NULL);
4249 create_file("msitest\\augustus", 500);
4250
4252
4254
4257 {
4258 skip("Not enough rights to perform tests\n");
4259 goto error;
4260 }
4261 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4262 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
4263 ok(delete_pf("msitest", FALSE), "Directory created\n");
4264
4265error:
4267 DeleteFileA("msitest\\augustus");
4268 RemoveDirectoryA("msitest");
4269}
static const msi_table ca51_tables[]
Definition: install.c:1791

Referenced by START_TEST().

◆ test_deferred_action()

static void test_deferred_action ( void  )
static

Definition at line 6160 of file install.c.

6161{
6162 char path[200], file[200], buffer[211];
6163 UINT r;
6164
6165 GetTempPathA(sizeof(path), path);
6166 GetTempFileNameA(path, "da", 0, file);
6167 sprintf(buffer, "TESTPATH=\"%s\"", file);
6168
6170
6172
6175 {
6176 skip("Not enough rights to perform tests\n");
6177 goto error;
6178 }
6179 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
6180
6181 check_file_matches(file, "onetwo");
6182
6183 ok(DeleteFileA(file), "Directory not created\n");
6184
6185error:
6187}
static const msi_table da_tables[]
Definition: install.c:2080
static void check_file_matches(const char *filename, const char *text)
Definition: install.c:6148

Referenced by START_TEST().

◆ test_feature_override()

static void test_feature_override ( void  )
static

Definition at line 5463 of file install.c.

5464{
5465 UINT r;
5467
5468 if (is_process_limited())
5469 {
5470 skip("process is limited\n");
5471 return;
5472 }
5473
5475 create_file("msitest\\override.txt", 1000);
5476 create_file("msitest\\preselected.txt", 1000);
5477 create_file("msitest\\notpreselected.txt", 1000);
5479
5480 if (is_wow64)
5482
5484
5485 r = MsiInstallProductA(msifile, "ADDLOCAL=override");
5487 {
5488 skip("Not enough rights to perform tests\n");
5489 goto error;
5490 }
5491 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5492
5493 ok(pf_exists("msitest\\override.txt"), "file not installed\n");
5494 ok(!pf_exists("msitest\\preselected.txt"), "file installed\n");
5495 ok(!pf_exists("msitest\\notpreselected.txt"), "file installed\n");
5496
5497 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5498 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5499
5500 ok(!delete_pf("msitest\\override.txt", TRUE), "file not removed\n");
5501
5502 r = MsiInstallProductA(msifile, "preselect=1");
5503 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5504
5505 ok(pf_exists("msitest\\override.txt"), "file not installed\n");
5506 ok(pf_exists("msitest\\preselected.txt"), "file not installed\n");
5507 ok(!pf_exists("msitest\\notpreselected.txt"), "file installed\n");
5508
5509 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5510 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5511
5512 ok(!delete_pf("msitest\\override.txt", TRUE), "file not removed\n");
5513 ok(!delete_pf("msitest\\preselected.txt", TRUE), "file not removed\n");
5514 ok(!delete_pf("msitest", FALSE), "directory not removed\n");
5515
5517 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5518
5519 ok(pf_exists("msitest\\override.txt"), "file not installed\n");
5520 ok(pf_exists("msitest\\preselected.txt"), "file not installed\n");
5521 ok(!pf_exists("msitest\\notpreselected.txt"), "file installed\n");
5522
5523 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5524 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5525
5526 ok(!delete_pf("msitest\\override.txt", TRUE), "file not removed\n");
5527 ok(!delete_pf("msitest\\preselected.txt", TRUE), "file not removed\n");
5528 ok(!delete_pf("msitest", FALSE), "directory not removed\n");
5529
5530 delete_key(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", access);
5531
5532error:
5533 DeleteFileA("msitest\\override.txt");
5534 DeleteFileA("msitest\\preselected.txt");
5535 DeleteFileA("msitest\\notpreselected.txt");
5538}
BOOL pf_exists(const char *file)
Definition: install.c:3620
static const msi_table fo_tables[]
Definition: install.c:1965
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
#define delete_key(r, p, s)
Definition: reg_test.h:64
ACCESS_MASK REGSAM
Definition: winreg.h:69

Referenced by START_TEST().

◆ test_feature_tree()

static void test_feature_tree ( void  )
static

Definition at line 6119 of file install.c.

6120{
6121 UINT r;
6122
6123 if (is_process_limited())
6124 {
6125 skip( "process is limited\n" );
6126 return;
6127 }
6128
6129 create_file( "msitest\\featuretree.txt", 1000 );
6131
6133
6134 r = MsiInstallProductA( msifile, "INSTALLTYPE=\"0\"" );
6135 ok( r == ERROR_INSTALL_FAILURE, "got %u\n", r );
6136
6137 r = MsiInstallProductA( msifile, "INSTALLTYPE=\"1\"" );
6138 ok( r == ERROR_SUCCESS, "got %u\n", r );
6139
6140 r = MsiInstallProductA( msifile, "REMOVE=ALL" );
6141 ok( r == ERROR_SUCCESS, "got %u\n", r );
6142
6143 DeleteFileA( "msitest\\featuretree.txt" );
6144 RemoveDirectoryA( "msitest" );
6146}
static const msi_table ft_tables[]
Definition: install.c:2066

Referenced by START_TEST().

◆ test_file_in_use()

static void test_file_in_use ( void  )
static

Definition at line 5341 of file install.c.

5342{
5343 UINT r;
5344 HANDLE file;
5345 HKEY hkey;
5346 char path[MAX_PATH];
5347
5348 if (is_process_limited())
5349 {
5350 skip("process is limited\n");
5351 return;
5352 }
5353
5355
5356 CreateDirectoryA("msitest", NULL);
5357 create_file("msitest\\maximus", 500);
5359
5361
5363 lstrcatA(path, "\\msitest");
5365
5366 lstrcatA(path, "\\maximus");
5368
5369 r = MsiInstallProductA(msifile, "REBOOT=ReallySuppress FULL=1");
5371 {
5372 skip("Not enough rights to perform tests\n");
5373 goto error;
5374 }
5375 ok(r == ERROR_SUCCESS_REBOOT_REQUIRED, "Expected ERROR_SUCCESS_REBOOT_REQUIRED got %u\n", r);
5376 ok(!file_matches_data(path, "msitest\\maximus"), "Expected file not to match\n");
5378 ok(!file_matches_data(path, "msitest\\maximus"), "Expected file not to match\n");
5379
5381 RegCloseKey(hkey);
5382
5383 ok(file_matches_data(path, "msitest\\maximus"), "Expected file to match\n");
5384 ok(delete_pf("msitest\\maximus", TRUE), "File not present\n");
5385 ok(delete_pf("msitest", FALSE), "Directory not present or not empty\n");
5386
5387 r = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5388 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5389
5390error:
5391 RegCloseKey(hkey);
5392
5393 delete_pf("msitest\\maximus", TRUE);
5394 delete_pf("msitest", FALSE);
5395 DeleteFileA("msitest\\maximus");
5398}
static const msi_table fiu_tables[]
Definition: install.c:1941
static void process_pending_renames(HKEY hkey)
Definition: install.c:5257
static BOOL file_matches_data(LPCSTR file, LPCSTR data)
Definition: install.c:5323
static const char session_manager[]
Definition: install.c:5254
#define ERROR_SUCCESS_REBOOT_REQUIRED
Definition: winerror.h:1215

Referenced by START_TEST().

◆ test_file_in_use_cab()

static void test_file_in_use_cab ( void  )
static

Definition at line 5400 of file install.c.

5401{
5402 UINT r;
5403 HANDLE file;
5404 HKEY hkey;
5405 char path[MAX_PATH];
5406
5407 if (is_process_limited())
5408 {
5409 skip("process is limited\n");
5410 return;
5411 }
5412
5414
5415 CreateDirectoryA("msitest", NULL);
5416 create_file("maximus", 500);
5417 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
5418 DeleteFileA("maximus");
5419
5421
5423
5425 lstrcatA(path, "\\msitest");
5427
5428 lstrcatA(path, "\\maximus");
5430
5431 r = MsiInstallProductA(msifile, "REBOOT=ReallySuppress FULL=1");
5433 {
5434 skip("Not enough rights to perform tests\n");
5435 goto error;
5436 }
5437 ok(r == ERROR_SUCCESS_REBOOT_REQUIRED, "Expected ERROR_SUCCESS_REBOOT_REQUIRED got %u\n", r);
5438 ok(!file_matches_data(path, "maximus"), "Expected file not to match\n");
5440 ok(!file_matches_data(path, "maximus"), "Expected file not to match\n");
5441
5443 RegCloseKey(hkey);
5444
5445 ok(file_matches_data(path, "maximus"), "Expected file to match\n");
5446 ok(delete_pf("msitest\\maximus", TRUE), "File not present\n");
5447 ok(delete_pf("msitest", FALSE), "Directory not present or not empty\n");
5448
5449 r = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5450 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5451
5452error:
5453 RegCloseKey(hkey);
5454
5455 delete_pf("msitest\\maximus", TRUE);
5456 delete_pf("msitest", FALSE);
5457 DeleteFileA("msitest\\maximus");
5461}
static const msi_table fiuc_tables[]
Definition: install.c:1953

Referenced by START_TEST().

◆ test_icon_table()

static void test_icon_table ( void  )
static

Definition at line 5540 of file install.c.

5541{
5542 MSIHANDLE hdb = 0, record;
5543 LPCSTR query;
5544 UINT res;
5546 static const char prodcode[] = "{7DF88A49-996F-4EC8-A022-BF956F9B2CBB}";
5547
5548 if (is_process_limited())
5549 {
5550 skip("process is limited\n");
5551 return;
5552 }
5553
5555
5557
5559 ok(res == ERROR_SUCCESS, "failed to open db: %d\n", res);
5560
5561 query = "CREATE TABLE `Icon` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NULL PRIMARY KEY `Name`)";
5562 res = run_query( hdb, 0, query );
5563 ok(res == ERROR_SUCCESS, "Can't create Icon table: %d\n", res);
5564
5565 create_file("icon.ico", 100);
5567 res = MsiRecordSetStreamA(record, 1, "icon.ico");
5568 ok(res == ERROR_SUCCESS, "Failed to add stream data to record: %d\n", res);
5569
5570 query = "INSERT INTO `Icon` (`Name`, `Data`) VALUES ('testicon', ?)";
5571 res = run_query(hdb, record, query);
5572 ok(res == ERROR_SUCCESS, "Insert into Icon table failed: %d\n", res);
5573
5575 ok(res == ERROR_SUCCESS, "Failed to close record handle: %d\n", res);
5576 DeleteFileA("icon.ico");
5577 res = MsiDatabaseCommit(hdb);
5578 ok(res == ERROR_SUCCESS, "Failed to commit database: %d\n", res);
5579 res = MsiCloseHandle(hdb);
5580 ok(res == ERROR_SUCCESS, "Failed to close database: %d\n", res);
5581
5582 /* per-user */
5583 res = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1");
5585 {
5586 skip("Not enough rights to perform tests\n");
5588 return;
5589 }
5590 ok(res == ERROR_SUCCESS, "Failed to do per-user install: %d\n", res);
5591
5593 lstrcatA(path, "\\");
5594 lstrcatA(path, "Microsoft\\Installer\\");
5595 lstrcatA(path, prodcode);
5596 lstrcatA(path, "\\testicon");
5597 ok(file_exists(path), "Per-user icon file isn't where it's expected (%s)\n", path);
5598
5599 res = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5600 ok(res == ERROR_SUCCESS, "Failed to uninstall per-user\n");
5601 ok(!file_exists(path), "Per-user icon file not removed (%s)\n", path);
5602
5603 /* system-wide */
5604 res = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1 ALLUSERS=1");
5605 ok(res == ERROR_SUCCESS, "Failed to system-wide install: %d\n", res);
5606
5608 lstrcatA(path, "\\");
5609 lstrcatA(path, "Installer\\");
5610 lstrcatA(path, prodcode);
5611 lstrcatA(path, "\\testicon");
5612 ok(file_exists(path), "System-wide icon file isn't where it's expected (%s)\n", path);
5613
5614 res = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5615 ok(res == ERROR_SUCCESS, "Failed to uninstall system-wide\n");
5616 ok(!file_exists(path), "System-wide icon file not removed (%s)\n", path);
5617
5620}
static const msi_table icon_base_tables[]
Definition: install.c:1979
static void delete_pfmsitest_files(void)
Definition: install.c:3631

Referenced by START_TEST().

◆ test_installed_prop()

static void test_installed_prop ( void  )
static

Definition at line 5143 of file install.c.

5144{
5145 static const char prodcode[] = "{7df88a48-996f-4ec8-a022-bf956f9b2cbb}";
5146 UINT r;
5147
5148 if (is_process_limited())
5149 {
5150 skip("process is limited\n");
5151 return;
5152 }
5153
5156
5158
5159 r = MsiInstallProductA(msifile, "FULL=1");
5161 {
5162 skip("Not enough rights to perform tests\n");
5163 goto error;
5164 }
5165 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5166
5167 r = MsiInstallProductA(msifile, "FULL=1");
5168 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
5169
5171 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
5172
5174
5175 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5176 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5177
5178error:
5181}
UINT WINAPI MsiConfigureProductExA(LPCSTR szProduct, int iInstallLevel, INSTALLSTATE eInstallState, LPCSTR szCommandLine)
Definition: msi.c:918
static const msi_table ip_tables[]
Definition: install.c:1876
@ INSTALLSTATE_DEFAULT
Definition: msi.h:48
@ INSTALLLEVEL_DEFAULT
Definition: msi.h:87

Referenced by START_TEST().

◆ test_installstate()

static void test_installstate ( void  )
static

Definition at line 4271 of file install.c.

4272{
4273 UINT r;
4274
4275 if (is_process_limited())
4276 {
4277 skip("process is limited\n");
4278 return;
4279 }
4280
4281 CreateDirectoryA("msitest", NULL);
4282 create_file("msitest\\alpha", 500);
4283 create_file("msitest\\beta", 500);
4284 create_file("msitest\\gamma", 500);
4285 create_file("msitest\\theta", 500);
4286 create_file("msitest\\delta", 500);
4287 create_file("msitest\\epsilon", 500);
4288 create_file("msitest\\zeta", 500);
4289 create_file("msitest\\iota", 500);
4290 create_file("msitest\\eta", 500);
4291 create_file("msitest\\kappa", 500);
4292 create_file("msitest\\lambda", 500);
4293 create_file("msitest\\mu", 500);
4294
4296
4298
4301 {
4302 skip("Not enough rights to perform tests\n");
4303 goto error;
4304 }
4305 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4306 ok(delete_pf("msitest\\alpha", TRUE), "File not installed\n");
4307 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4308 ok(delete_pf("msitest\\gamma", TRUE), "File not installed\n");
4309 ok(delete_pf("msitest\\theta", TRUE), "File not installed\n");
4310 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4311 ok(!delete_pf("msitest\\epsilon", TRUE), "File installed\n");
4312 ok(!delete_pf("msitest\\zeta", TRUE), "File installed\n");
4313 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4314 ok(!delete_pf("msitest\\eta", TRUE), "File installed\n");
4315 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4316 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4317 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4318 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4319
4320 r = MsiInstallProductA(msifile, "ADDLOCAL=\"one,two,three,four\"");
4321 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4322 ok(delete_pf("msitest\\alpha", TRUE), "File not installed\n");
4323 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4324 ok(delete_pf("msitest\\gamma", TRUE), "File not installed\n");
4325 ok(delete_pf("msitest\\theta", TRUE), "File not installed\n");
4326 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4327 ok(delete_pf("msitest\\epsilon", TRUE), "File not installed\n");
4328 ok(delete_pf("msitest\\zeta", TRUE), "File not installed\n");
4329 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4330 ok(delete_pf("msitest\\eta", TRUE), "File not installed\n");
4331 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4332 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4333 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4334 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4335
4336 r = MsiInstallProductA(msifile, "ADDSOURCE=\"one,two,three,four\"");
4337 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4338 ok(delete_pf("msitest\\alpha", TRUE), "File not installed\n");
4339 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4340 ok(!delete_pf("msitest\\gamma", TRUE), "File installed\n");
4341 ok(delete_pf("msitest\\theta", TRUE), "File not installed\n");
4342 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4343 ok(!delete_pf("msitest\\epsilon", TRUE), "File installed\n");
4344 ok(delete_pf("msitest\\zeta", TRUE), "File not installed\n");
4345 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4346 ok(!delete_pf("msitest\\eta", TRUE), "File installed\n");
4347 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4348 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4349 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4350 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4351
4352 r = MsiInstallProductA(msifile, "REMOVE=\"one,two,three,four\"");
4353 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4354 ok(!delete_pf("msitest\\alpha", TRUE), "File installed\n");
4355 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4356 ok(!delete_pf("msitest\\gamma", TRUE), "File installed\n");
4357 ok(!delete_pf("msitest\\theta", TRUE), "File installed\n");
4358 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4359 ok(!delete_pf("msitest\\epsilon", TRUE), "File installed\n");
4360 ok(!delete_pf("msitest\\zeta", TRUE), "File installed\n");
4361 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4362 ok(!delete_pf("msitest\\eta", TRUE), "File installed\n");
4363 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4364 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4365 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4366 ok(!delete_pf("msitest", FALSE), "Directory created\n");
4367
4368error:
4370 DeleteFileA("msitest\\alpha");
4371 DeleteFileA("msitest\\beta");
4372 DeleteFileA("msitest\\gamma");
4373 DeleteFileA("msitest\\theta");
4374 DeleteFileA("msitest\\delta");
4375 DeleteFileA("msitest\\epsilon");
4376 DeleteFileA("msitest\\zeta");
4377 DeleteFileA("msitest\\iota");
4378 DeleteFileA("msitest\\eta");
4379 DeleteFileA("msitest\\kappa");
4380 DeleteFileA("msitest\\lambda");
4381 DeleteFileA("msitest\\mu");
4382 RemoveDirectoryA("msitest");
4383}
static const msi_table is_tables[]
Definition: install.c:1804

Referenced by START_TEST().

◆ test_int_widths()

static void test_int_widths ( void  )
static

Definition at line 4978 of file install.c.

4979{
4980 static const char int0[] = "int0\ni0\nint0\tint0\n1";
4981 static const char int1[] = "int1\ni1\nint1\tint1\n1";
4982 static const char int2[] = "int2\ni2\nint2\tint2\n1";
4983 static const char int3[] = "int3\ni3\nint3\tint3\n1";
4984 static const char int4[] = "int4\ni4\nint4\tint4\n1";
4985 static const char int5[] = "int5\ni5\nint5\tint5\n1";
4986 static const char int8[] = "int8\ni8\nint8\tint8\n1";
4987 static const struct
4988 {
4989 const char *data;
4990 unsigned int size;
4991 UINT ret;
4992 }
4993 tests[] =
4994 {
4995 { int0, sizeof(int0) - 1, ERROR_SUCCESS },
4996 { int1, sizeof(int1) - 1, ERROR_SUCCESS },
4997 { int2, sizeof(int2) - 1, ERROR_SUCCESS },
4998 { int3, sizeof(int3) - 1, ERROR_FUNCTION_FAILED },
4999 { int4, sizeof(int4) - 1, ERROR_SUCCESS },
5000 { int5, sizeof(int5) - 1, ERROR_FUNCTION_FAILED },
5001 { int8, sizeof(int8) - 1, ERROR_FUNCTION_FAILED }
5002 };
5003 WCHAR tmpdir[MAX_PATH], msitable[MAX_PATH], msidb[MAX_PATH];
5004 MSIHANDLE db;
5005 UINT r, i;
5006
5009
5010 lstrcpyW(msitable, tmpdir);
5011 lstrcatW(msitable, L"\\msitable.idt");
5012
5013 lstrcpyW(msidb, tmpdir);
5014 lstrcatW(msidb, L"\\msitest.msi");
5015
5016 r = MsiOpenDatabaseW(msidb, MSIDBOPEN_CREATE, &db);
5017 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5018
5019 for (i = 0; i < ARRAY_SIZE(tests); i++)
5020 {
5021 DWORD count;
5022 HANDLE handle = CreateFileW(msitable, GENERIC_WRITE, 0, NULL,
5026
5027 r = MsiDatabaseImportW(db, tmpdir, L"msitable.idt");
5028 ok(r == tests[i].ret, " %u expected %u, got %u\n", i, tests[i].ret, r);
5029
5030 r = MsiDatabaseCommit(db);
5031 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5032 DeleteFileW(msitable);
5033 }
5034
5035 MsiCloseHandle(db);
5036 DeleteFileW(msidb);
5038}
#define int3
Definition: btrfs_drv.h:1745
#define CreateFileW
Definition: compat.h:741
#define lstrcpyW
Definition: compat.h:749
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2080
UINT WINAPI MsiDatabaseImportW(MSIHANDLE handle, const WCHAR *szFolder, const WCHAR *szFilename)
Definition: database.c:838
char int8
Definition: platform.h:10
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
static struct test_info tests[]
static BYTE int1[]
Definition: cert.c:3154
static BYTE int5[]
Definition: cert.c:3158
static BYTE int4[]
Definition: cert.c:3157
static BYTE int2[]
Definition: cert.c:3155
const void * data
Definition: install.c:3756
static char tmpdir[MAX_PATH]
Definition: shlexec.c:52
#define ERROR_FUNCTION_FAILED
Definition: winerror.h:985

Referenced by START_TEST().

◆ test_missingcab()

static void test_missingcab ( void  )
static

Definition at line 4065 of file install.c.

4066{
4067 UINT r;
4068
4069 if (is_process_limited())
4070 {
4071 skip("process is limited\n");
4072 return;
4073 }
4074
4075 CreateDirectoryA("msitest", NULL);
4076 create_file("msitest\\augustus", 500);
4077 create_file("maximus", 500);
4078 create_file("tiberius", 500);
4079
4081
4083
4084 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
4085 create_cab_file("test4.cab", MEDIA_SIZE, "tiberius\0");
4086
4087 create_pf("msitest", FALSE);
4088 create_pf_data("msitest\\caesar", "abcdefgh", TRUE);
4089 create_pf_data("msitest\\tiberius", "abcdefgh", TRUE);
4090
4093 {
4094 skip("Not enough rights to perform tests\n");
4095 goto error;
4096 }
4097 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4098 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4099 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
4100 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
4101 ok(compare_pf_data("msitest\\tiberius", "abcdefgh", sizeof("abcdefgh")), "Wrong file contents\n");
4102 ok(delete_pf("msitest\\tiberius", TRUE), "File not installed\n");
4103 ok(!delete_pf("msitest\\gaius", TRUE), "File installed\n");
4104 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4105
4106 create_pf("msitest", FALSE);
4107 create_pf_data("msitest\\caesar", "abcdefgh", TRUE);
4108 create_pf_data("msitest\\tiberius", "abcdefgh", TRUE);
4109 create_pf("msitest\\gaius", TRUE);
4110
4111 r = MsiInstallProductA(msifile, "GAIUS=1");
4112 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4113 todo_wine
4114 {
4115 ok(!delete_pf("msitest\\maximus", TRUE), "File installed\n");
4116 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
4117 }
4118 ok(delete_pf("msitest\\caesar", TRUE), "File removed\n");
4119 ok(compare_pf_data("msitest\\tiberius", "abcdefgh", sizeof("abcdefgh")), "Wrong file contents\n");
4120 ok(delete_pf("msitest\\tiberius", TRUE), "File removed\n");
4121 ok(delete_pf("msitest\\gaius", TRUE), "File removed\n");
4122 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4123
4124error:
4125 delete_pf("msitest", FALSE);
4126 DeleteFileA("msitest\\augustus");
4127 RemoveDirectoryA("msitest");
4128 DeleteFileA("maximus");
4129 DeleteFileA("tiberius");
4130 DeleteFileA("test1.cab");
4131 DeleteFileA("test4.cab");
4133}
#define create_pf(file, is_file)
Definition: install.c:4063
static const msi_table mc_tables[]
Definition: install.c:1750
void create_pf_data(LPCSTR file, LPCSTR data, BOOL is_file)
Definition: install.c:4049
static BOOL compare_pf_data(const char *filename, const char *data, DWORD size)
Definition: install.c:2541

Referenced by START_TEST().

◆ test_missingcomponent()

static void test_missingcomponent ( void  )
static

Definition at line 4757 of file install.c.

4758{
4759 UINT r;
4760
4761 if (is_process_limited())
4762 {
4763 skip("process is limited\n");
4764 return;
4765 }
4766
4767 CreateDirectoryA("msitest", NULL);
4768 create_file("msitest\\hydrogen", 500);
4769 create_file("msitest\\helium", 500);
4770 create_file("msitest\\lithium", 500);
4771 create_file("beryllium", 500);
4772
4774
4776
4777 r = MsiInstallProductA(msifile, "INSTALLLEVEL=10 PROPVAR=42");
4779 {
4780 skip("Not enough rights to perform tests\n");
4781 goto error;
4782 }
4783 else if (r == ERROR_INSTALL_FAILURE)
4784 {
4785 win_skip("broken result\n");
4786 goto error;
4787 }
4788 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4789 ok(pf_exists("msitest\\hydrogen"), "File not installed\n");
4790 ok(pf_exists("msitest\\helium"), "File not installed\n");
4791 ok(pf_exists("msitest\\lithium"), "File not installed\n");
4792 ok(!pf_exists("msitest\\beryllium"), "File installed\n");
4793 ok(pf_exists("msitest"), "File not installed\n");
4794
4795 r = MsiInstallProductA(msifile, "REMOVE=ALL INSTALLLEVEL=10 PROPVAR=42");
4796 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4797 ok(!delete_pf("msitest\\hydrogen", TRUE), "File not removed\n");
4798 ok(!delete_pf("msitest\\helium", TRUE), "File not removed\n");
4799 ok(!delete_pf("msitest\\lithium", TRUE), "File not removed\n");
4800 ok(!pf_exists("msitest\\beryllium"), "File installed\n");
4801 ok(!delete_pf("msitest", FALSE), "Directory not removed\n");
4802
4803error:
4805 DeleteFileA("msitest\\hydrogen");
4806 DeleteFileA("msitest\\helium");
4807 DeleteFileA("msitest\\lithium");
4808 DeleteFileA("beryllium");
4809 RemoveDirectoryA("msitest");
4810}
static const msi_table mcp_tables[]
Definition: install.c:1828
#define win_skip
Definition: test.h:160

Referenced by START_TEST().

◆ test_mixed_package()

static void test_mixed_package ( void  )
static

Definition at line 5845 of file install.c.

5846{
5847 UINT r;
5848 LONG res;
5849 HKEY hkey;
5850 char value[MAX_PATH];
5851 DWORD size;
5852
5853 if (is_process_limited())
5854 {
5855 skip("process is limited\n");
5856 return;
5857 }
5858 if (!is_wow64 && !is_64bit)
5859 {
5860 skip("this test must be run on 64-bit\n");
5861 return;
5862 }
5865
5868 {
5869 skip("Not enough rights to perform tests\n");
5870 goto error;
5871 }
5872 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5873
5874 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
5875 ok(!res, "can't open 32-bit component key, got %ld\n", res);
5876 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5877 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5878 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5879 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5880 RegCloseKey(hkey);
5881
5882 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
5883 ok(!res, "can't open 64-bit component key, got %ld\n", res);
5884 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5885 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5886 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5887 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5888 RegCloseKey(hkey);
5889
5891 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5893 ok(res == ERROR_SUCCESS, "can't open 32-bit CLSID key, got %ld\n", res);
5894 if (res == ERROR_SUCCESS) {
5895 size = sizeof(value);
5896 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5897 ok(!strcmp(value, "winetest32.dll"), "got %s\n", value);
5898 RegCloseKey(hkey);
5899 }
5900
5902 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5904 ok(res == ERROR_SUCCESS, "can't open 64-bit CLSID key, got %ld\n", res);
5905 if (res == ERROR_SUCCESS) {
5906 size = sizeof(value);
5907 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5908 ok(!strcmp(value, "winetest64.dll"), "got %s\n", value);
5909 RegCloseKey(hkey);
5910 }
5911
5912 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5913 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5914
5915 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
5916 ok(res == ERROR_FILE_NOT_FOUND || broken(!res), "32-bit component key not removed\n");
5917
5918 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
5919 ok(res == ERROR_FILE_NOT_FOUND, "64-bit component key not removed\n");
5920
5922 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
5924 ok(res == ERROR_FILE_NOT_FOUND, "32-bit CLSID key not removed\n");
5925
5927 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
5929 ok(res == ERROR_FILE_NOT_FOUND, "64-bit CLSID key not removed\n");
5930
5933
5935 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5936
5937 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
5938 ok(!res, "can't open 32-bit component key, got %ld\n", res);
5939 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5940 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5941 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5942 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5943 RegCloseKey(hkey);
5944
5945 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
5946 ok(!res, "can't open 64-bit component key, got %ld\n", res);
5947 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5948 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5949 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5950 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5951 RegCloseKey(hkey);
5952
5954 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5956 ok(res == ERROR_SUCCESS, "can't open 32-bit CLSID key, got %ld\n", res);
5957 if (res == ERROR_SUCCESS) {
5958 size = sizeof(value);
5959 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5960 ok(!strcmp(value, "winetest32.dll"), "got %s\n", value);
5961 RegCloseKey(hkey);
5962 }
5963
5965 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5967 ok(res == ERROR_SUCCESS, "can't open 64-bit CLSID key, got %ld\n", res);
5968 if (res == ERROR_SUCCESS) {
5969 size = sizeof(value);
5970 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5971 ok(!strcmp(value, "winetest64.dll"), "got %s\n", value);
5972 RegCloseKey(hkey);
5973 }
5974
5975 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5976 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5977
5978 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
5979 ok(res == ERROR_FILE_NOT_FOUND || broken(!res), "32-bit component key not removed\n");
5980
5981 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
5982 ok(res == ERROR_FILE_NOT_FOUND, "64-bit component key not removed\n");
5983
5985 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
5987 ok(res == ERROR_FILE_NOT_FOUND, "32-bit CLSID key not removed\n");
5988
5990 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
5992 ok(res == ERROR_FILE_NOT_FOUND, "64-bit CLSID key not removed\n");
5993
5994error:
5996}
static const BOOL is_64bit
Definition: install.c:56
static const msi_table mixed_tables[]
Definition: install.c:2015
#define create_database_template(name, tables, num_tables, version, template)
Definition: utils.h:46
Definition: pdh_main.c:94
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define KEY_WOW64_32KEY
Definition: cmtypes.h:45

Referenced by START_TEST().

◆ test_mixedmedia()

static void test_mixedmedia ( void  )
static

Definition at line 3308 of file install.c.

3309{
3310 UINT r;
3311
3312 if (is_process_limited())
3313 {
3314 skip("process is limited\n");
3315 return;
3316 }
3317
3318 CreateDirectoryA("msitest", NULL);
3319 create_file("msitest\\maximus", 500);
3320 create_file("msitest\\augustus", 500);
3321 create_file("caesar", 500);
3322
3324
3326
3327 create_cab_file("test1.cab", MEDIA_SIZE, "caesar\0");
3328
3331 {
3332 skip("Not enough rights to perform tests\n");
3333 goto error;
3334 }
3335 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3336 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3337 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3338 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3339 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3340
3341error:
3342 /* Delete the files in the temp (current) folder */
3343 DeleteFileA("msitest\\maximus");
3344 DeleteFileA("msitest\\augustus");
3345 RemoveDirectoryA("msitest");
3346 DeleteFileA("caesar");
3347 DeleteFileA("test1.cab");
3349}
static const msi_table mm_tables[]
Definition: install.c:1613

Referenced by START_TEST().

◆ test_MsiInstallProduct()

static void test_MsiInstallProduct ( void  )
static

Definition at line 2765 of file install.c.

2766{
2767 UINT r;
2769 LONG res;
2770 HKEY hkey;
2771 DWORD num, size, type;
2773
2774 if (is_process_limited())
2775 {
2776 skip("process is limited\n");
2777 return;
2778 }
2779
2780 if (is_wow64)
2782
2784
2785 if (0) /* crashes on Win10 1709 */
2786 {
2787 r = MsiInstallProductA(NULL, "INSTALL=ALL");
2788 ok(r == ERROR_INVALID_PARAMETER, "got %u\n", r);
2789
2791 ok(r == ERROR_INVALID_PARAMETER, "got %u\n", r);
2792 }
2793
2794 /* szPackagePath is empty */
2795 r = MsiInstallProductA("", "INSTALL=ALL");
2797 "Expected ERROR_PATH_NOT_FOUND, got %d\n", r);
2798
2801
2802 /* install, don't publish */
2805 {
2806 skip("Not enough rights to perform tests\n");
2807 goto error;
2808 }
2809 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2810
2812
2813 res = RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", 0, access, &hkey);
2814 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2815
2816 size = MAX_PATH;
2817 type = REG_SZ;
2818 res = RegQueryValueExA(hkey, "Name", NULL, &type, (LPBYTE)path, &size);
2819 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2820 ok(!lstrcmpA(path, "imaname"), "Expected imaname, got %s\n", path);
2821
2822 size = MAX_PATH;
2823 type = REG_SZ;
2824 res = RegQueryValueExA(hkey, "blah", NULL, &type, (LPBYTE)path, &size);
2825 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2826
2827 size = sizeof(num);
2828 type = REG_DWORD;
2829 res = RegQueryValueExA(hkey, "number", NULL, &type, (LPBYTE)&num, &size);
2830 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2831 ok(num == 314, "Expected 314, got %lu\n", num);
2832
2833 size = MAX_PATH;
2834 type = REG_SZ;
2835 res = RegQueryValueExA(hkey, "OrderTestName", NULL, &type, (LPBYTE)path, &size);
2836 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2837 ok(!lstrcmpA(path, "OrderTestValue"), "Expected OrderTestValue, got %s\n", path);
2838
2839 delete_key(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", access);
2840
2841 /* not published, reinstall */
2843 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2844
2846
2847 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2848 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2849 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2850
2852
2853 /* not published, RemovePreviousVersions set */
2855 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2856
2858
2859 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2860 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2861 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2862
2864
2865 /* not published, version number bumped */
2867 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2868
2870
2871 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2872 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2873 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2874
2876
2877 /* not published, RemovePreviousVersions set and version number bumped */
2879 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2880
2882
2883 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2884 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2885 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2886
2888
2889 /* install, publish product */
2890 r = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1");
2891 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2892
2894
2895 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2896 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2897
2899
2900 /* published, reinstall */
2902 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2903
2905
2906 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2907 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2908
2910
2911 /* published product, RemovePreviousVersions set */
2913 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2914
2916
2917 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2918 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2919
2921
2922 /* published product, version number bumped */
2924 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2925
2927
2928 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2929 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2930
2932
2933 /* published product, RemovePreviousVersions set and version number bumped */
2935 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2936
2938
2939 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2940 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2941
2942 r = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
2943 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2944
2945error:
2948}
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
GLuint GLuint num
Definition: glext.h:9618
#define REG_SZ
Definition: layer.c:22
static const msi_table up_tables[]
Definition: install.c:1462
static const msi_table up5_tables[]
Definition: install.c:1514
static const msi_table up2_tables[]
Definition: install.c:1475
static const msi_table up4_tables[]
Definition: install.c:1501
static const msi_table up7_tables[]
Definition: install.c:1540
static const msi_table up3_tables[]
Definition: install.c:1488
static const msi_table up6_tables[]
Definition: install.c:1527
#define REG_DWORD
Definition: sdbapi.c:596
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106

Referenced by START_TEST().

◆ test_MsiSetComponentState()

static void test_MsiSetComponentState ( void  )
static

Definition at line 2950 of file install.c.

2951{
2952 INSTALLSTATE installed, action;
2953 MSIHANDLE package;
2954 char path[MAX_PATH];
2955 UINT r;
2956
2958
2960
2962 lstrcatA(path, "\\");
2964
2966
2967 r = MsiOpenPackageA(path, &package);
2969 {
2970 skip("Not enough rights to perform tests\n");
2971 goto error;
2972 }
2973 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2974
2975 r = MsiDoActionA(package, "CostInitialize");
2976 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2977
2978 r = MsiDoActionA(package, "FileCost");
2979 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2980
2981 r = MsiDoActionA(package, "CostFinalize");
2982 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2983
2984 r = MsiGetComponentStateA(package, "dangler", &installed, &action);
2985 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2986 ok(installed == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", installed);
2987 ok(action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
2988
2989 r = MsiSetComponentStateA(package, "dangler", INSTALLSTATE_SOURCE);
2990 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2991
2992 MsiCloseHandle(package);
2993
2994error:
2997}
const WCHAR * action
Definition: action.c:7479
UINT WINAPI MsiGetComponentStateA(MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
Definition: install.c:1396
UINT WINAPI MsiDoActionA(MSIHANDLE hInstall, LPCSTR szAction)
Definition: install.c:45
UINT WINAPI MsiSetComponentStateA(MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE iState)
Definition: install.c:1380
UINT WINAPI MsiOpenPackageA(LPCSTR szPackage, MSIHANDLE *phPackage)
Definition: package.c:1669
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
@ INSTALLSTATE_UNKNOWN
Definition: msi.h:42
@ INSTALLSTATE_ABSENT
Definition: msi.h:45
@ INSTALLSTATE_SOURCE
Definition: msi.h:47
int INSTALLSTATE
Definition: winemsi.idl:31

Referenced by START_TEST().

◆ test_package_validation()

static void test_package_validation ( void  )
static

Definition at line 5622 of file install.c.

5623{
5624 UINT r;
5625
5626 if (is_process_limited())
5627 {
5628 skip("process is limited\n");
5629 return;
5630 }
5631
5632 CreateDirectoryA("msitest", NULL);
5633 create_file("msitest\\maximus", 500);
5635
5637
5640 {
5641 skip("Not enough rights to perform tests\n");
5642 goto error;
5643 }
5644 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5645 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5646 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5647
5650
5652 ok(r == ERROR_INSTALL_LANGUAGE_UNSUPPORTED, "Expected ERROR_INSTALL_LANGUAGE_UNSUPPORTED, got %u\n", r);
5653
5656
5658 ok(r == ERROR_INSTALL_LANGUAGE_UNSUPPORTED, "Expected ERROR_INSTALL_LANGUAGE_UNSUPPORTED, got %u\n", r);
5659
5662
5664 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5665 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5666 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5667
5669 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 200, "Intel64,9999;1033");
5670
5672 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5673
5675 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 200, "Intel32,1033;1033");
5676
5678 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5679
5681 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 200, "Intel32,9999;1033");
5682
5684 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5685
5688
5690 ok(r == ERROR_INSTALL_LANGUAGE_UNSUPPORTED, "Expected ERROR_INSTALL_LANGUAGE_UNSUPPORTED, got %u\n", r);
5691 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5692 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5693
5695 {
5699 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5700 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5701 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5702
5706 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5707 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5708 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5709 }
5710
5713
5715 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5716 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5717 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5718
5719 if (is_64bit && !is_wow64)
5720 {
5723
5725 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5726 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5727 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5728
5731
5733 ok(r == ERROR_INSTALL_PACKAGE_INVALID, "Expected ERROR_INSTALL_PACKAGE_INVALID, got %u\n", r);
5734 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5735 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5736
5739
5741 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5742 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5743 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5744 }
5745 else if (is_wow64)
5746 {
5749
5751 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5752 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5753 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5754
5757
5759 ok(r == ERROR_INSTALL_PACKAGE_INVALID, "Expected ERROR_INSTALL_PACKAGE_INVALID, got %u\n", r);
5760 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5761 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5762
5765
5767 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5768 ok(delete_pf("msitest\\maximus", TRUE), "file exists\n");
5769 ok(delete_pf("msitest", FALSE), "directory exists\n");
5770 }
5771 else
5772 {
5775
5777 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5778 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5779 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5780
5782 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 100, "Alpha,Beta,Intel;0");
5783
5785 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5786 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5787 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5788
5791
5793 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5794 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5795 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5796
5799
5801 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5802 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5803 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5804 }
5805
5806error:
5807 /* Delete the files in the temp (current) folder */
5809 DeleteFileA("msitest\\maximus");
5810 RemoveDirectoryA("msitest");
5811}
LANGID WINAPI GetSystemDefaultLangID(void)
Definition: lang.c:761
static const msi_table pv_tables[]
Definition: install.c:1991
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_ENGLISH
Definition: nls.h:52
#define SUBLANG_ENGLISH_US
Definition: nls.h:222
#define ERROR_INSTALL_PACKAGE_INVALID
Definition: winerror.h:978
#define ERROR_INSTALL_PLATFORM_UNSUPPORTED
Definition: winerror.h:991
#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED
Definition: winerror.h:981

Referenced by START_TEST().

◆ test_packagecoltypes()

static void test_packagecoltypes ( void  )
static

Definition at line 2999 of file install.c.

3000{
3001 MSIHANDLE hdb, view, rec;
3002 char path[MAX_PATH];
3003 WCHAR pathW[MAX_PATH];
3004 LPCSTR query;
3005 UINT r, count;
3006
3008
3010
3012 lstrcatA(path, "\\");
3014 MultiByteToWideChar( CP_ACP, 0, path, -1, pathW, MAX_PATH );
3015
3016 r = MsiOpenDatabaseW(pathW, MSIDBOPEN_READONLY, &hdb);
3017 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3018
3019 query = "SELECT * FROM `Media`";
3020 r = MsiDatabaseOpenViewA( hdb, query, &view );
3021 ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n");
3022
3025 ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n");
3026 ok(count == 6, "Expected 6, got %d\n", count);
3027 ok(check_record(rec, 1, "DiskId"), "wrong column label\n");
3028 ok(check_record(rec, 2, "LastSequence"), "wrong column label\n");
3029 ok(check_record(rec, 3, "DiskPrompt"), "wrong column label\n");
3030 ok(check_record(rec, 4, "Cabinet"), "wrong column label\n");
3031 ok(check_record(rec, 5, "VolumeLabel"), "wrong column label\n");
3032 ok(check_record(rec, 6, "Source"), "wrong column label\n");
3033 MsiCloseHandle(rec);
3034
3037 ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n");
3038 ok(count == 6, "Expected 6, got %d\n", count);
3039 ok(check_record(rec, 1, "i2"), "wrong column label\n");
3040 ok(check_record(rec, 2, "i4"), "wrong column label\n");
3041 ok(check_record(rec, 3, "L64"), "wrong column label\n");
3042 ok(check_record(rec, 4, "S255"), "wrong column label\n");
3043 ok(check_record(rec, 5, "S32"), "wrong column label\n");
3044 ok(check_record(rec, 6, "S72"), "wrong column label\n");
3045
3046 MsiCloseHandle(rec);
3048 MsiCloseHandle(hdb);
3050
3052}
#define check_record(rec,...)
Definition: db.c:62
UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE handle)
Definition: record.c:113
UINT WINAPI MsiViewGetColumnInfo(MSIHANDLE hView, MSICOLINFO info, MSIHANDLE *hRec)
Definition: msiquery.c:642
@ MSICOLINFO_NAMES
Definition: msiquery.h:36
@ MSICOLINFO_TYPES
Definition: msiquery.h:37

Referenced by START_TEST().

◆ test_preselected()

static void test_preselected ( void  )
static

Definition at line 5088 of file install.c.

5089{
5090 UINT r;
5091
5092 if (is_process_limited())
5093 {
5094 skip("process is limited\n");
5095 return;
5096 }
5097
5100
5102
5103 r = MsiInstallProductA(msifile, "ADDLOCAL=One");
5105 {
5106 skip("Not enough rights to perform tests\n");
5107 goto error;
5108 }
5109 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5110
5111 ok(!delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File installed\n");
5112 ok(!delete_pf("msitest\\cabout\\new", FALSE), "Directory created\n");
5113 ok(!delete_pf("msitest\\cabout\\four.txt", TRUE), "File installed\n");
5114 ok(!delete_pf("msitest\\cabout", FALSE), "Directory created\n");
5115 ok(!delete_pf("msitest\\changed\\three.txt", TRUE), "File installed\n");
5116 ok(!delete_pf("msitest\\changed", FALSE), "Directory created\n");
5117 ok(!delete_pf("msitest\\first\\two.txt", TRUE), "File installed\n");
5118 ok(!delete_pf("msitest\\first", FALSE), "Directory created\n");
5119 ok(!delete_pf("msitest\\filename", TRUE), "File installed\n");
5120 ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
5121 ok(delete_pf("msitest", FALSE), "Directory not created\n");
5122
5124 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5125
5126 ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
5127 ok(delete_pf("msitest\\cabout\\new", FALSE), "Directory not created\n");
5128 ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
5129 ok(delete_pf("msitest\\cabout", FALSE), "Directory not created\n");
5130 ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
5131 ok(delete_pf("msitest\\changed", FALSE), "Directory not created\n");
5132 ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
5133 ok(delete_pf("msitest\\first", FALSE), "Directory not created\n");
5134 ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
5135 ok(!delete_pf("msitest\\one.txt", TRUE), "File installed\n");
5136 ok(delete_pf("msitest", FALSE), "Directory not created\n");
5137
5138error:
5141}
static const msi_table ps_tables[]
Definition: install.c:1449

Referenced by START_TEST().

◆ test_propcase()

static void test_propcase ( void  )
static

Definition at line 4935 of file install.c.

4936{
4937 UINT r;
4938
4939 if (is_process_limited())
4940 {
4941 skip("process is limited\n");
4942 return;
4943 }
4944
4945 CreateDirectoryA("msitest", NULL);
4946 create_file("msitest\\augustus", 500);
4947
4949
4951
4952 r = MsiInstallProductA(msifile, "MyProp=42");
4954 {
4955 skip("Not enough rights to perform tests\n");
4956 goto error;
4957 }
4958 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4959 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4960 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4961
4962 r = MsiInstallProductA(msifile, "Prop1=\"Copyright \"\"My Company\"\" 2015\" MyProp=42");
4963 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4964 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4965 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4966
4967 r = MsiInstallProductA(msifile, "Prop1=\"\"\"install.exe\"\" /Install\" MyProp=\"42\"");
4968 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4969 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4970 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4971
4972error:
4974 DeleteFileA("msitest\\augustus");
4975 RemoveDirectoryA("msitest");
4976}
static const msi_table pc_tables[]
Definition: install.c:1864

Referenced by START_TEST().

◆ test_readonlyfile()

static void test_readonlyfile ( void  )
static

Definition at line 3425 of file install.c.

3426{
3427 UINT r;
3428 DWORD size;
3429 HANDLE file;
3431
3432 if (is_process_limited())
3433 {
3434 skip("process is limited\n");
3435 return;
3436 }
3437
3438 CreateDirectoryA("msitest", NULL);
3439 create_file("msitest\\maximus", 500);
3441
3443
3445 lstrcatA(path, "\\msitest");
3447
3448 lstrcatA(path, "\\maximus");
3451
3452 WriteFile(file, "readonlyfile", strlen("readonlyfile"), &size, NULL);
3454
3457 {
3458 skip("Not enough rights to perform tests\n");
3459 goto error;
3460 }
3461 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3462 ok(file_matches(path), "Expected file to be overwritten\n");
3463 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3464 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3465
3466error:
3467 /* Delete the files in the temp (current) folder */
3468 DeleteFileA("msitest\\maximus");
3469 RemoveDirectoryA("msitest");
3471}
static BOOL file_matches(LPSTR path)
Definition: install.c:3410
static const msi_table rof_tables[]
Definition: install.c:1651
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702

Referenced by START_TEST().

◆ test_readonlyfile_cab()

static void test_readonlyfile_cab ( void  )
static

Definition at line 3473 of file install.c.

3474{
3475 UINT r;
3476 DWORD size;
3477 HANDLE file;
3479 CHAR buf[16];
3480
3481 if (is_process_limited())
3482 {
3483 skip("process is limited\n");
3484 return;
3485 }
3486
3487 CreateDirectoryA("msitest", NULL);
3488 create_file("maximus", 500);
3489 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3490 DeleteFileA("maximus");
3491
3493
3495
3497 lstrcatA(path, "\\msitest");
3499
3500 lstrcatA(path, "\\maximus");
3503
3504 WriteFile(file, "readonlyfile", strlen("readonlyfile"), &size, NULL);
3506
3509 {
3510 skip("Not enough rights to perform tests\n");
3511 goto error;
3512 }
3513 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3514
3515 memset( buf, 0, sizeof(buf) );
3518 {
3519 ReadFile(file, buf, sizeof(buf) - 1, &size, NULL);
3521 }
3522 ok(!memcmp( buf, "maximus", sizeof("maximus")-1 ), "Expected file to be overwritten, got '%s'\n", buf);
3523 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3524 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3525
3526error:
3527 /* Delete the files in the temp (current) folder */
3529 DeleteFileA("msitest\\maximus");
3530 RemoveDirectoryA("msitest");
3532}
static const msi_table rofc_tables[]
Definition: install.c:1663

Referenced by START_TEST().

◆ test_remove_upgrade_code()

static void test_remove_upgrade_code ( void  )
static

Definition at line 6068 of file install.c.

6069{
6070 UINT r;
6071 LONG res;
6072 HKEY hkey;
6074 DWORD type, size;
6075 char buf[1];
6076
6077 if (is_process_limited())
6078 {
6079 skip( "process is limited\n" );
6080 return;
6081 }
6083
6086
6088
6089 r = MsiInstallProductA( msifile, "FULL=1" );
6090 ok(r == ERROR_SUCCESS, "got %u\n", r);
6091
6093 "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UpgradeCodes\\51AAE0C44620A5E4788506E91F249BD2",
6094 0, access, &hkey );
6095 ok( res == ERROR_SUCCESS, "got %ld\n", res );
6096
6097 type = 0xdeadbeef;
6098 buf[0] = 0x55;
6099 size = sizeof(buf);
6100 res = RegQueryValueExA( hkey, "94A88FD7F6998CE40A22FB59F6B9C2BB", NULL, &type, (BYTE *)buf, &size );
6101 ok( res == ERROR_SUCCESS, "got %ld\n", res );
6102 ok( type == REG_SZ, "got %lu\n", type );
6103 ok( size == 1, "got %lu\n", size );
6104 ok( !buf[0], "wrong data\n" );
6105 RegCloseKey( hkey );
6106
6107 r = MsiInstallProductA( msifile, "REMOVE=ALL" );
6108 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
6109
6111 "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UpgradeCodes\\51AAE0C44620A5E4788506E91F249BD2",
6112 0, access, &hkey );
6113 ok( res == ERROR_FILE_NOT_FOUND, "got %ld\n", res );
6114
6115 RemoveDirectoryA( "msitest" );
6117}
unsigned char BYTE
Definition: xxhash.c:193

Referenced by START_TEST().

◆ test_samesequence()

static void test_samesequence ( void  )
static

Definition at line 3351 of file install.c.

3352{
3353 UINT r;
3354
3357
3359
3361 if (r == ERROR_INSTALL_FAILURE)
3362 {
3363 win_skip("unprivileged user?\n");
3364 goto error;
3365 }
3366 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3367 if (r == ERROR_SUCCESS)
3368 {
3369 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3370 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3371 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3372 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3373 }
3374
3375error:
3378}
static const msi_table ss_tables[]
Definition: install.c:1625

Referenced by START_TEST().

◆ test_setdirproperty()

static void test_setdirproperty ( void  )
static

Definition at line 3534 of file install.c.

3535{
3536 UINT r;
3537
3538 if (is_process_limited())
3539 {
3540 skip("process is limited\n");
3541 return;
3542 }
3543
3544 CreateDirectoryA("msitest", NULL);
3545 create_file("msitest\\maximus", 500);
3547
3549
3552 {
3553 skip("Not enough rights to perform tests\n");
3554 goto error;
3555 }
3556 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3557 ok(delete_cf("msitest\\maximus", TRUE), "File not installed\n");
3558 ok(delete_cf("msitest", FALSE), "Directory not created\n");
3559
3560error:
3561 /* Delete the files in the temp (current) folder */
3563 DeleteFileA("msitest\\maximus");
3564 RemoveDirectoryA("msitest");
3565}
static BOOL delete_cf(const CHAR *rel_path, BOOL is_file)
Definition: install.c:2527
static const msi_table sdp_tables[]
Definition: install.c:1675

Referenced by START_TEST().

◆ test_shared_component()

static void test_shared_component ( void  )
static

Definition at line 6024 of file install.c.

6025{
6026 UINT r;
6027
6028 if (is_process_limited())
6029 {
6030 skip("process is limited\n");
6031 return;
6032 }
6033 CreateDirectoryA("msitest", NULL);
6034 create_file("msitest\\sharedcomponent.txt", 1000);
6036 100, 0, ";", "{A8826420-FD72-4E61-9E15-C1944CF4CBE1}");
6038 100, 0, ";", "{A8B50B30-0E8A-4ACD-B3CF-1A5DC58B2739}");
6039
6041
6043 ok(r == ERROR_SUCCESS, "got %u\n", r);
6044
6045 ok(pf_exists("msitest\\sharedcomponent.txt"), "file not installed\n");
6046
6048 ok(r == ERROR_SUCCESS, "got %u\n", r);
6049
6050 ok(pf_exists("msitest\\sharedcomponent.txt"), "file not installed\n");
6051
6052 r = MsiInstallProductA(msifile, "REMOVE=ALL");
6053 ok(r == ERROR_SUCCESS, "got %u\n", r);
6054
6055 ok(pf_exists("msitest\\sharedcomponent.txt"), "file removed\n");
6056
6057 r = MsiInstallProductA(msifile2, "REMOVE=ALL");
6058 ok(r == ERROR_SUCCESS, "got %u\n", r);
6059
6060 ok(!pf_exists("msitest\\sharedcomponent.txt"), "file not removed\n");
6061
6062 DeleteFileA("msitest\\sharedcomponent.txt");
6063 RemoveDirectoryA("msitest");
6066}
static const msi_table shc_tables[]
Definition: install.c:2040
static const msi_table shc2_tables[]
Definition: install.c:2053

Referenced by START_TEST().

◆ test_shortcut()

static void test_shortcut ( void  )
static

Definition at line 5040 of file install.c.

5041{
5042 UINT r;
5043 HRESULT hr;
5044
5045 if (is_process_limited())
5046 {
5047 skip("process is limited\n");
5048 return;
5049 }
5050
5053
5055
5058 {
5059 skip("Not enough rights to perform tests\n");
5060 goto error;
5061 }
5062 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5063
5065 ok(SUCCEEDED(hr), "CoInitialize failed %#lx\n", hr);
5066
5068 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5069
5071
5073 ok(SUCCEEDED(hr), "CoInitialize failed %#lx\n", hr);
5074
5076 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5077
5079
5080 while (!delete_pf("msitest\\Shortcut.lnk", TRUE) && GetLastError() == ERROR_SHARING_VIOLATION) Sleep(1000);
5082
5083error:
5086}
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit)
Definition: compobj.c:2002
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static const msi_table sc_tables[]
Definition: install.c:1436
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:278
@ COINIT_MULTITHREADED
Definition: objbase.h:279
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:790
#define ERROR_SHARING_VIOLATION
Definition: winerror.h:135

Referenced by START_TEST().

◆ test_source_resolution()

static void test_source_resolution ( void  )
static

Definition at line 6249 of file install.c.

6250{
6251 UINT r;
6252
6253 if (is_process_limited())
6254 {
6255 skip( "process is limited\n" );
6256 return;
6257 }
6258
6261
6263
6264 r = MsiInstallProductA(msifile, "RESOLVE_SOURCE=1");
6265 ok(r == ERROR_SUCCESS, "got %u\n", r);
6266
6267 r = MsiInstallProductA(msifile, "PROCESS_COMPONENTS=1");
6268 ok(r == ERROR_SUCCESS, "got %u\n", r);
6269
6270 r = MsiInstallProductA(msifile, "INSTALL_FILES=1");
6271 ok(r == ERROR_SUCCESS, "got %u\n", r);
6272
6276}
static const msi_table sr_tables[]
Definition: install.c:2105

Referenced by START_TEST().

◆ test_sourcedirprop()

static void test_sourcedirprop ( void  )
static

Definition at line 4812 of file install.c.

4813{
4814 UINT r;
4815 CHAR props[MAX_PATH + 18];
4816
4817 if (is_process_limited())
4818 {
4819 skip("process is limited\n");
4820 return;
4821 }
4822
4823 CreateDirectoryA("msitest", NULL);
4824 create_file("msitest\\augustus", 500);
4825
4827
4829
4832 {
4833 skip("Not enough rights to perform tests\n");
4834 goto error;
4835 }
4836 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4837 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
4838 ok(delete_pf("msitest", FALSE), "Directory created\n");
4839
4840 DeleteFileA("msitest\\augustus");
4841 RemoveDirectoryA("msitest");
4842
4843 CreateDirectoryA("altsource", NULL);
4844 CreateDirectoryA("altsource\\msitest", NULL);
4845 create_file("altsource\\msitest\\augustus", 500);
4846
4847 sprintf(props, "SRCDIR=%s\\altsource\\", CURR_DIR);
4848
4850 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4851 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
4852 ok(delete_pf("msitest", FALSE), "Directory created\n");
4853
4854 DeleteFileA("altsource\\msitest\\augustus");
4855 RemoveDirectoryA("altsource\\msitest");
4856 RemoveDirectoryA("altsource");
4857
4858error:
4859 DeleteFileA("msitest\\augustus");
4860 RemoveDirectoryA("msitest");
4862}
static const WCHAR props[]
Definition: wbemdisp.c:288

Referenced by START_TEST().

◆ test_sourcefolder()

static void test_sourcefolder ( void  )
static

Definition at line 4135 of file install.c.

4136{
4137 UINT r;
4138
4139 if (is_process_limited())
4140 {
4141 skip("process is limited\n");
4142 return;
4143 }
4144
4145 CreateDirectoryA("msitest", NULL);
4146 create_file("augustus", 500);
4147
4149
4151
4154 {
4155 skip("Not enough rights to perform tests\n");
4156 goto error;
4157 }
4159 "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4160 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
4161 todo_wine
4162 {
4163 ok(!delete_pf("msitest", FALSE), "Directory created\n");
4164 }
4165 RemoveDirectoryA("msitest");
4166
4169 "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4170 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
4171 todo_wine
4172 {
4173 ok(!delete_pf("msitest", FALSE), "Directory created\n");
4174 }
4175
4176error:
4178 DeleteFileA("augustus");
4179}
static const msi_table sf_tables[]
Definition: install.c:1763

Referenced by START_TEST().

◆ test_sourcepath()

static void test_sourcepath ( void  )
static

Definition at line 4676 of file install.c.

4677{
4678 UINT r, i;
4679
4681 {
4682 skip("Run in interactive mode to run source path tests.\n");
4683 return;
4684 }
4685
4687
4689
4690 for (i = 0; i < ARRAY_SIZE(spmap); i++)
4691 {
4692 if (spmap[i].sost)
4693 {
4694 CreateDirectoryA("shortone", NULL);
4695 CreateDirectoryA("shortone\\shorttwo", NULL);
4696 }
4697
4698 if (spmap[i].solt)
4699 {
4700 CreateDirectoryA("shortone", NULL);
4701 CreateDirectoryA("shortone\\longtwo", NULL);
4702 }
4703
4704 if (spmap[i].lost)
4705 {
4706 CreateDirectoryA("longone", NULL);
4707 CreateDirectoryA("longone\\shorttwo", NULL);
4708 }
4709
4710 if (spmap[i].lolt)
4711 {
4712 CreateDirectoryA("longone", NULL);
4713 CreateDirectoryA("longone\\longtwo", NULL);
4714 }
4715
4716 if (spmap[i].soste)
4717 create_file("shortone\\shorttwo\\augustus", 50);
4718 if (spmap[i].solte)
4719 create_file("shortone\\longtwo\\augustus", 100);
4720 if (spmap[i].loste)
4721 create_file("longone\\shorttwo\\augustus", 150);
4722 if (spmap[i].lolte)
4723 create_file("longone\\longtwo\\augustus", 200);
4724
4726 ok(r == spmap[i].err, "%d: Expected %d, got %d\n", i, spmap[i].err, r);
4727 ok(get_pf_file_size("msitest\\augustus") == spmap[i].size,
4728 "%u: Expected %lu, got %lu\n", i, spmap[i].size,
4729 get_pf_file_size("msitest\\augustus"));
4730
4731 if (r == ERROR_SUCCESS)
4732 {
4733 ok(delete_pf("msitest\\augustus", TRUE), "%d: File not installed\n", i);
4734 ok(delete_pf("msitest", FALSE), "%d: Directory not created\n", i);
4735 }
4736 else
4737 {
4738 ok(!delete_pf("msitest\\augustus", TRUE), "%d: File installed\n", i);
4739 todo_wine ok(!delete_pf("msitest", FALSE), "%d: Directory installed\n", i);
4740 }
4741
4742 DeleteFileA("shortone\\shorttwo\\augustus");
4743 DeleteFileA("shortone\\longtwo\\augustus");
4744 DeleteFileA("longone\\shorttwo\\augustus");
4745 DeleteFileA("longone\\longtwo\\augustus");
4746 RemoveDirectoryA("shortone\\shorttwo");
4747 RemoveDirectoryA("shortone\\longtwo");
4748 RemoveDirectoryA("longone\\shorttwo");
4749 RemoveDirectoryA("longone\\longtwo");
4750 RemoveDirectoryA("shortone");
4751 RemoveDirectoryA("longone");
4752 }
4753
4755}
static DWORD get_pf_file_size(LPCSTR file)
Definition: install.c:4657
static const struct sourcepathmap spmap[256]
static const msi_table sp_tables[]
Definition: install.c:1816
#define err(...)
int winetest_interactive

Referenced by START_TEST().

◆ test_transformprop()

static void test_transformprop ( void  )
static

Definition at line 3808 of file install.c.

3809{
3810 UINT r;
3811
3812 if (is_process_limited())
3813 {
3814 skip("process is limited\n");
3815 return;
3816 }
3817
3818 CreateDirectoryA("msitest", NULL);
3819 create_file("msitest\\augustus", 500);
3820
3822
3824
3827 {
3828 skip("Not enough rights to perform tests\n");
3829 goto error;
3830 }
3831 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3832 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3833 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3834
3835 if (0)
3837 else
3839
3840 r = MsiInstallProductA(msifile, "TRANSFORMS=winetest.mst");
3841 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3842 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3843 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3844
3845error:
3846 /* Delete the files in the temp (current) folder */
3850 DeleteFileA("msitest\\augustus");
3851 RemoveDirectoryA("msitest");
3852}
static const msi_table tp_tables[]
Definition: install.c:1700
static void generate_transform_manual(void)
Definition: install.c:3765
static void generate_transform(void)
Definition: install.c:3697

Referenced by START_TEST().

◆ test_uiLevelFlags()

static void test_uiLevelFlags ( void  )
static

Definition at line 3380 of file install.c.

3381{
3382 UINT r;
3383
3386
3388
3390 if (r == ERROR_INSTALL_FAILURE)
3391 {
3392 win_skip("unprivileged user?\n");
3393 goto error;
3394 }
3395
3396 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3397 if (r == ERROR_SUCCESS)
3398 {
3399 ok(!delete_pf("msitest\\maximus", TRUE), "UI install occurred, but execute-only was requested.\n");
3400 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3401 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3402 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3403 }
3404
3405error:
3408}
static const msi_table ui_tables[]
Definition: install.c:1637
@ INSTALLUILEVEL_SOURCERESONLY
Definition: msi.h:73

Referenced by START_TEST().

◆ test_upgrade_code()

static void test_upgrade_code ( void  )
static

Definition at line 5813 of file install.c.

5814{
5815 UINT r;
5816
5817 if (is_process_limited())
5818 {
5819 skip("process is limited\n");
5820 return;
5821 }
5822
5823 CreateDirectoryA("msitest", NULL);
5824 create_file("msitest\\upgradecode.txt", 1000);
5826
5828
5830 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5831
5832 ok(pf_exists("msitest\\upgradecode.txt"), "file not installed\n");
5833
5834 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5835 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5836
5837 ok(!delete_pf("msitest\\upgradecode.txt", TRUE), "file not removed\n");
5838 ok(!delete_pf("msitest", FALSE), "directory not removed\n");
5839
5840 DeleteFileA("msitest\\upgradecode.txt");
5841 RemoveDirectoryA("msitest");
5843}
static const msi_table uc_tables[]
Definition: install.c:2003

Referenced by START_TEST().

◆ test_volume_props()

static void test_volume_props ( void  )
static

Definition at line 5998 of file install.c.

5999{
6000 UINT r;
6001
6002 if (is_process_limited())
6003 {
6004 skip("process is limited\n");
6005 return;
6006 }
6007 CreateDirectoryA("msitest", NULL);
6008 create_file("msitest\\volumeprop.txt", 1000);
6010
6012
6014 ok(r == ERROR_SUCCESS, "got %u\n", r);
6015
6016 r = MsiInstallProductA(msifile, "REMOVE=ALL");
6017 ok(r == ERROR_SUCCESS, "got %u\n", r);
6018
6019 DeleteFileA("msitest\\volumeprop.txt");
6020 RemoveDirectoryA("msitest");
6022}
static const msi_table vp_tables[]
Definition: install.c:2027

Referenced by START_TEST().

◆ test_wow64()

static void test_wow64 ( void  )
static

Definition at line 6189 of file install.c.

6190{
6191 void *cookie;
6192 UINT r;
6193
6194 if (!is_wow64)
6195 {
6196 skip("test must be run on WoW64\n");
6197 return;
6198 }
6199
6200 if (is_process_limited())
6201 {
6202 skip("process is limited\n");
6203 return;
6204 }
6205
6210 {
6211 skip("Not enough rights to perform tests\n");
6212 goto error;
6213 }
6214
6215 pWow64DisableWow64FsRedirection(&cookie);
6216
6217 ok(!delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File installed\n");
6218 ok(!delete_pf("msitest\\cabout\\new", FALSE), "Directory created\n");
6219 ok(!delete_pf("msitest\\cabout\\four.txt", TRUE), "File installed\n");
6220 ok(!delete_pf("msitest\\cabout", FALSE), "Directory created\n");
6221 ok(!delete_pf("msitest\\changed\\three.txt", TRUE), "File installed\n");
6222 ok(!delete_pf("msitest\\changed", FALSE), "Directory created\n");
6223 ok(!delete_pf("msitest\\first\\two.txt", TRUE), "File installed\n");
6224 ok(!delete_pf("msitest\\first", FALSE), "Directory created\n");
6225 ok(!delete_pf("msitest\\one.txt", TRUE), "File installed\n");
6226 ok(!delete_pf("msitest\\filename", TRUE), "File installed\n");
6227 ok(!delete_pf("msitest", FALSE), "Directory created\n");
6228
6229 ok(delete_pf_native("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
6230 ok(delete_pf_native("msitest\\cabout\\new", FALSE), "Directory not created\n");
6231 ok(delete_pf_native("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
6232 ok(delete_pf_native("msitest\\cabout", FALSE), "Directory not created\n");
6233 ok(delete_pf_native("msitest\\changed\\three.txt", TRUE), "File not installed\n");
6234 ok(delete_pf_native("msitest\\changed", FALSE), "Directory not created\n");
6235 ok(delete_pf_native("msitest\\first\\two.txt", TRUE), "File not installed\n");
6236 ok(delete_pf_native("msitest\\first", FALSE), "Directory not created\n");
6237 ok(delete_pf_native("msitest\\one.txt", TRUE), "File not installed\n");
6238 ok(delete_pf_native("msitest\\filename", TRUE), "File not installed\n");
6239 ok(delete_pf_native("msitest", FALSE), "Directory not created\n");
6240
6241 pWow64RevertWow64FsRedirection(cookie);
6242
6243error:
6246}
static BOOL delete_pf_native(const CHAR *rel_path, BOOL is_file)
Definition: install.c:2513
static const msi_table x64_tables[]
Definition: install.c:2093
Definition: cookie.c:34

Referenced by START_TEST().

◆ UINT()

static UINT ( WINAPI pMsiQueryComponentStateA)
static

◆ write_file()

static void write_file ( const CHAR filename,
const char data,
int  data_size 
)
static

Definition at line 2591 of file install.c.

2592{
2593 DWORD size;
2594
2597 WriteFile(hf, data, data_size, &size, NULL);
2598 CloseHandle(hf);
2599}

Referenced by create_database_wordcount().

◆ write_msi_summary_info()

static void write_msi_summary_info ( MSIHANDLE  db,
INT  version,
INT  wordcount,
const char template,
const char packagecode 
)
static

Definition at line 2601 of file install.c.

2603{
2604 MSIHANDLE summary;
2605 UINT r;
2606
2607 r = MsiGetSummaryInformationA(db, NULL, 5, &summary);
2608 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2609
2610 r = MsiSummaryInfoSetPropertyA(summary, PID_TEMPLATE, VT_LPSTR, 0, NULL, template);
2611 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2612
2613 r = MsiSummaryInfoSetPropertyA(summary, PID_REVNUMBER, VT_LPSTR, 0, NULL, packagecode);
2614 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2615
2617 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2618
2619 r = MsiSummaryInfoSetPropertyA(summary, PID_WORDCOUNT, VT_I4, wordcount, NULL, NULL);
2620 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2621
2622 r = MsiSummaryInfoSetPropertyA(summary, PID_TITLE, VT_LPSTR, 0, NULL, "MSITEST");
2623 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2624
2625 /* write the summary changes back to the stream */
2626 r = MsiSummaryInfoPersist(summary);
2627 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2628
2629 MsiCloseHandle(summary);
2630}
#define PID_TEMPLATE
Definition: suminfo.c:49

Referenced by create_database_wordcount().

Variable Documentation

◆ adm_admin_exec_seq_dat

const CHAR adm_admin_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"AdminExecuteSequence\tAction\n"
"CostFinalize\t\t1000\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"SetPOSTADMIN\t\t950\n"
"InstallFiles\t\t4000\n"
"InstallFinalize\t\t6600\n"
"InstallInitialize\t\t1500\n"
"InstallValidate\t\t1400\n"
"LaunchConditions\t\t100"

Definition at line 592 of file install.c.

◆ adm_component_dat

const CHAR adm_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"augustus\t\tMSITESTDIR\t0\tPOSTADMIN=1\taugustus"

Definition at line 582 of file install.c.

◆ adm_custom_action_dat

const CHAR adm_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"SetPOSTADMIN\t51\tPOSTADMIN\t1\t\n"

Definition at line 587 of file install.c.

◆ adm_tables

const msi_table adm_tables[]
static
Initial value:
=
{
ADD_TABLE(adm_component),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
ADD_TABLE(adm_custom_action),
ADD_TABLE(adm_admin_exec_seq),
}
#define ADD_TABLE(x)
Definition: automation.c:166

Definition at line 1724 of file install.c.

Referenced by test_admin().

◆ ai2_component_dat

const CHAR ai2_component_dat[]
static
Initial value:
=
"Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"Five\t{8CC92E9D-14B2-4CA4-B2AA-B11D02078087}\tNEWDIR\t2\t\tfive.txt\n"
"Four\t{FD37B4EA-7209-45C0-8917-535F35A2F080}\tCABOUTDIR\t2\t\tfour.txt\n"

Definition at line 1402 of file install.c.

◆ ai2_feature_comp_dat

const CHAR ai2_feature_comp_dat[]
static
Initial value:
=
"Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"Five\tFive\n"
"Four\tFour\n"

Definition at line 1416 of file install.c.

◆ ai2_feature_dat

const CHAR ai2_feature_dat[]
static
Initial value:
=
"Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"Five\t\tFive\tThe Five Feature\t5\t3\tNEWDIR\t0\n"
"Four\t\tFour\tThe Four Feature\t4\t3\tCABOUTDIR\t0\n"

Definition at line 1409 of file install.c.

◆ ai2_file_dat

const CHAR ai2_file_dat[]
static
Initial value:
=
"File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"five.txt\tFive\tfive.txt\t1000\t\t\t0\t5\n"
"four.txt\tFour\tfour.txt\t1000\t\t\t0\t4\n"

Definition at line 1395 of file install.c.

◆ ai2_tables

const msi_table ai2_tables[]
static
Initial value:
=
{
ADD_TABLE(ai2_component),
ADD_TABLE(ai2_feature),
ADD_TABLE(ai2_feature_comp),
ADD_TABLE(ai2_file),
ADD_TABLE(install_exec_seq),
}
__u8 media
Definition: mkdosfs.c:9

Definition at line 1852 of file install.c.

Referenced by test_adminimage().

◆ ai_file_dat

const CHAR ai_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"five.txt\tFive\tfive.txt\t1000\t\t\t16384\t5\n"
"four.txt\tFour\tfour.txt\t1000\t\t\t16384\t4\n"
"one.txt\tOne\tone.txt\t1000\t\t\t16384\t1\n"
"three.txt\tThree\tthree.txt\t1000\t\t\t16384\t3\n"
"two.txt\tTwo\ttwo.txt\t1000\t\t\t16384\t2\n"
"file\tcomponent\tfilename\t100\t\t\t8192\t1\n"

Definition at line 848 of file install.c.

◆ ai_tables

const msi_table ai_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(ai_file),
ADD_TABLE(install_exec_seq),
}
INTERNETFEATURELIST feature
Definition: misc.c:1719

Definition at line 1840 of file install.c.

Referenced by test_adminimage().

◆ amp_component_dat

const CHAR amp_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"augustus\t\tMSITESTDIR\t0\tMYPROP=2718 and MyProp=42\taugustus\n"

Definition at line 605 of file install.c.

◆ amp_tables

const msi_table amp_tables[]
static
Initial value:
=
{
ADD_TABLE(amp_component),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1738 of file install.c.

Referenced by test_adminprops().

◆ APP_DATA_DIR

char APP_DATA_DIR[MAX_PATH]

Definition at line 69 of file install.c.

Referenced by get_user_dirs(), and test_icon_table().

◆ aup2_install_exec_seq_dat

const CHAR aup2_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostFinalize\t\t1000\n"
"ValidateProductID\t\t700\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"RemoveFiles\t\t3500\n"
"InstallFiles\t\t4000\n"
"RegisterUser\t\t6000\n"
"RegisterProduct\t\t6100\n"
"PublishFeatures\t\t6300\n"
"PublishProduct\t\t6400\n"
"InstallFinalize\t\t6600\n"
"InstallInitialize\t\t1500\n"
"ProcessComponents\t\t1600\n"
"UnpublishFeatures\t\t1800\n"
"InstallValidate\t\t1400\n"
"LaunchConditions\t\t100\n"
"TestAllUsersProp\tALLUSERS=2 AND NOT REMOVE\t50\n"

Definition at line 905 of file install.c.

◆ aup2_property_dat

const CHAR aup2_property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"DefaultUIFont\tDlgFont8\n"
"HASUIRUN\t0\n"
"ALLUSERS\t2\n"
"INSTALLLEVEL\t3\n"
"InstallMode\tTypical\n"
"Manufacturer\tWine\n"
"PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
"ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
"ProductID\tnone\n"
"ProductLanguage\t1033\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.1\n"
"PROMPTROLLBACKCOST\tP\n"
"Setup\tSetup\n"
"UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
"AdminProperties\tPOSTADMIN\n"
"ROOTDRIVE\tC:\\\n"
"MSIFASTINSTALL\t1\n"

Definition at line 198 of file install.c.

◆ aup2_tables

const msi_table aup2_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(aup2_install_exec_seq),
ADD_TABLE(aup_custom_action),
}

Definition at line 1902 of file install.c.

Referenced by test_allusers_prop().

◆ aup3_install_exec_seq_dat

const CHAR aup3_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostFinalize\t\t1000\n"
"ValidateProductID\t\t700\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"RemoveFiles\t\t3500\n"
"InstallFiles\t\t4000\n"
"RegisterUser\t\t6000\n"
"RegisterProduct\t\t6100\n"
"PublishFeatures\t\t6300\n"
"PublishProduct\t\t6400\n"
"InstallFinalize\t\t6600\n"
"InstallInitialize\t\t1500\n"
"ProcessComponents\t\t1600\n"
"UnpublishFeatures\t\t1800\n"
"InstallValidate\t\t1400\n"
"LaunchConditions\t\t100\n"
"TestAllUsersProp\tALLUSERS=1 AND NOT REMOVE\t50\n"

Definition at line 926 of file install.c.

◆ aup3_tables

const msi_table aup3_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(aup2_install_exec_seq),
ADD_TABLE(aup_custom_action),
}

Definition at line 1915 of file install.c.

Referenced by test_allusers_prop().

◆ aup4_tables

const msi_table aup4_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(aup3_install_exec_seq),
ADD_TABLE(aup_custom_action),
}

Definition at line 1928 of file install.c.

Referenced by test_allusers_prop().

◆ aup_custom_action_dat

const CHAR aup_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"TestAllUsersProp\t19\t\tTest failed\t\n"

Definition at line 947 of file install.c.

◆ aup_install_exec_seq_dat

const CHAR aup_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostFinalize\t\t1000\n"
"ValidateProductID\t\t700\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"RemoveFiles\t\t3500\n"
"InstallFiles\t\t4000\n"
"RegisterUser\t\t6000\n"
"RegisterProduct\t\t6100\n"
"PublishFeatures\t\t6300\n"
"PublishProduct\t\t6400\n"
"InstallFinalize\t\t6600\n"
"InstallInitialize\t\t1500\n"
"ProcessComponents\t\t1600\n"
"UnpublishFeatures\t\t1800\n"
"InstallValidate\t\t1400\n"
"LaunchConditions\t\t100\n"
"TestAllUsersProp\tALLUSERS AND NOT REMOVE\t50\n"

Definition at line 884 of file install.c.

◆ aup_property_dat

const CHAR aup_property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"DefaultUIFont\tDlgFont8\n"
"HASUIRUN\t0\n"
"ALLUSERS\t1\n"
"INSTALLLEVEL\t3\n"
"InstallMode\tTypical\n"
"Manufacturer\tWine\n"
"PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
"ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
"ProductID\tnone\n"
"ProductLanguage\t1033\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.1\n"
"PROMPTROLLBACKCOST\tP\n"
"Setup\tSetup\n"
"UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
"AdminProperties\tPOSTADMIN\n"
"ROOTDRIVE\tC:\\\n"
"MSIFASTINSTALL\t1\n"

Definition at line 176 of file install.c.

◆ aup_tables

const msi_table aup_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(aup_install_exec_seq),
ADD_TABLE(aup_custom_action),
}

Definition at line 1889 of file install.c.

Referenced by test_allusers_prop().

◆ ca1__validation_dat

const CHAR ca1__validation_dat[]
static
Initial value:
=
"Table\tColumn\tNullable\tMinValue\tMaxValue\tKeyTable\tKeyColumn\tCategory\tSet\tDescription\n"
"s32\ts32\ts4\tI4\tI4\tS255\tI2\tS32\tS255\tS255\n"
"_Validation\tTable\tColumn\n"
"test2\tA\tN\t\t\t\t\t\t\t\n"
"test2\tB\tN\t\t\t\t\t\t\t\n"

Definition at line 709 of file install.c.

◆ ca1_custom_action_dat

const CHAR ca1_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\n"
"s72\ti2\tS64\tS0\n"
"CustomAction\tAction\n"
"embednull\t51\tembednullprop\ta[~]b\n"
"nested51\t51\tnested\t1\n"
"nested1\t1\tcustom.dll\tnested\n"
"maintest\t1\tcustom.dll\tmain_test\n"
"process1\t1\tcustom.dll\tprocess1\n"
"process2\t1\tcustom.dll\tprocess2\n"
"process_deferred\t1025\tcustom.dll\tprocess2\n"
"async1\t129\tcustom.dll\tasync1\n"
"async2\t1\tcustom.dll\tasync2\n"
"testretval\t1\tcustom.dll\ttest_retval\n"

Definition at line 683 of file install.c.

◆ ca1_install_exec_seq_dat

const CHAR ca1_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostInitialize\t\t100\n"
"FileCost\t\t200\n"
"CostFinalize\t\t300\n"
"InstallValidate\t\t400\n"
"InstallInitialize\t\t500\n"
"embednull\t\t600\n"
"maintest\tMAIN_TEST\t700\n"
"testretval\tTEST_RETVAL\t710\n"
"process1\tTEST_PROCESS\t720\n"
"process2\tTEST_PROCESS\t721\n"
"process_deferred\tTEST_PROCESS\t722\n"
"async1\tTEST_ASYNC\t730\n"
"async2\tTEST_ASYNC\t731\n"
"InstallFinalize\t\t800\n"

Definition at line 665 of file install.c.

◆ ca1_tables

const msi_table ca1_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(ca1_install_exec_seq),
ADD_TABLE(ca1_custom_action),
ADD_TABLE(ca1_test_seq),
ADD_TABLE(ca1_test2),
ADD_TABLE(ca1__validation),
}

Definition at line 1775 of file install.c.

Referenced by test_customaction1().

◆ ca1_test2_dat

const CHAR ca1_test2_dat[]
static
Initial value:
=
"A\tB\n"
"i2\ti2\n"
"test2\tA\n"
"1\t2\n"

Definition at line 703 of file install.c.

◆ ca1_test_seq_dat

const CHAR ca1_test_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"TestSequence\tAction\n"
"nested1\t\t1\n"
"nested51\t\t2\n"

Definition at line 697 of file install.c.

◆ ca51_component_dat

const CHAR ca51_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"augustus\t\tMSITESTDIR\t0\tMYPROP=42\taugustus\n"

Definition at line 716 of file install.c.

◆ ca51_custom_action_dat

const CHAR ca51_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\n"
"s72\ti2\tS64\tS0\n"
"CustomAction\tAction\n"
"GoodSetProperty\t51\tMYPROP\t42\n"
"BadSetProperty\t51\t\tMYPROP\n"
"SetSourceDir\t51\tSourceDir\t[SRCDIR]\n"

Definition at line 737 of file install.c.

◆ ca51_install_exec_seq_dat

const CHAR ca51_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"ValidateProductID\t\t700\n"
"GoodSetProperty\t\t725\n"
"BadSetProperty\t\t750\n"
"CostInitialize\t\t800\n"
"ResolveSource\t\t810\n"
"FileCost\t\t900\n"
"SetSourceDir\tSRCDIR\t910\n"
"CostFinalize\t\t1000\n"
"InstallValidate\t\t1400\n"
"InstallInitialize\t\t1500\n"
"InstallFiles\t\t4000\n"
"InstallFinalize\t\t6600"

Definition at line 721 of file install.c.

◆ ca51_tables

const msi_table ca51_tables[]
static
Initial value:
=
{
ADD_TABLE(ca51_component),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(ca51_install_exec_seq),
ADD_TABLE(rof_media),
ADD_TABLE(ca51_custom_action),
}

Definition at line 1791 of file install.c.

Referenced by test_customaction51(), and test_sourcedirprop().

◆ cc2_component_dat

const CHAR cc2_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"maximus\t\tMSITESTDIR\t0\t1\tmaximus\n"
"augustus\t\tMSITESTDIR\t0\t0\taugustus\n"
"caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"

Definition at line 332 of file install.c.

◆ cc2_file_dat

const CHAR cc2_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
"augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
"tiberius\tmaximus\ttiberius\t500\t\t\t16384\t3\n"
"caesar\tcaesar\tcaesar\t500\t\t\t16384\t12"

Definition at line 358 of file install.c.

◆ cc2_tables

const msi_table cc2_tables[]
static
Initial value:
=
{
ADD_TABLE(cc2_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(cc2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(cc_media),
}

Definition at line 1565 of file install.c.

Referenced by test_continuouscabs().

◆ cc3_media_dat

const CHAR cc3_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t10\t\ttest1.cab\tDISK1\t\n"
"2\t2\t\ttest2_.cab\tDISK2\t\n"
"3\t12\t\ttest3.cab\tDISK3\t\n"

Definition at line 373 of file install.c.

◆ cc3_tables

const msi_table cc3_tables[]
static
Initial value:
=
{
ADD_TABLE(cc_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(cc_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(cc3_media),
}

Definition at line 1577 of file install.c.

Referenced by test_continuouscabs().

◆ cc_component_dat

const CHAR cc_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"maximus\t\tMSITESTDIR\t0\t1\tmaximus\n"
"augustus\t\tMSITESTDIR\t0\t1\taugustus\n"
"caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"

Definition at line 325 of file install.c.

◆ cc_feature_comp_dat

const CHAR cc_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"feature\tmaximus\n"
"feature\taugustus\n"
"feature\tcaesar"

Definition at line 344 of file install.c.

◆ cc_feature_dat

const CHAR cc_feature_dat[]
static
Initial value:
= "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"feature\t\t\t\t2\t1\tTARGETDIR\t0"

Definition at line 339 of file install.c.

◆ cc_file_dat

const CHAR cc_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
"augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
"caesar\tcaesar\tcaesar\t500\t\t\t16384\t12"

Definition at line 351 of file install.c.

◆ cc_media_dat

const CHAR cc_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t10\t\ttest1.cab\tDISK1\t\n"
"2\t2\t\ttest2.cab\tDISK2\t\n"
"3\t12\t\ttest3.cab\tDISK3\t\n"

Definition at line 366 of file install.c.

◆ cc_tables

const msi_table cc_tables[]
static
Initial value:
=
{
ADD_TABLE(cc_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(cc_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(cc_media),
}

Definition at line 1553 of file install.c.

Referenced by test_caborder(), and test_continuouscabs().

◆ ci2_feature_comp_dat

const CHAR ci2_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"feature\taugustus"

Definition at line 543 of file install.c.

◆ ci2_file_dat

const CHAR ci2_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"augustus\taugustus\taugustus\t500\t\t\t8192\t1"

Definition at line 548 of file install.c.

◆ ci_component_dat

const CHAR ci_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"maximus\t{DF2CBABC-3BCC-47E5-A998-448D1C0C895B}\tMSITESTDIR\t0\tUILevel=5\tmaximus\n"

Definition at line 538 of file install.c.

◆ cie_component_dat

const CHAR cie_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"maximus\t\tMSITESTDIR\t0\t1\tmaximus\n"
"augustus\t\tMSITESTDIR\t0\t1\taugustus\n"
"caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"
"gaius\t\tMSITESTDIR\t0\t1\tgaius\n"

Definition at line 507 of file install.c.

◆ cie_feature_comp_dat

const CHAR cie_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"feature\tmaximus\n"
"feature\taugustus\n"
"feature\tcaesar\n"
"feature\tgaius"

Definition at line 515 of file install.c.

◆ cie_file_dat

const CHAR cie_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
"augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
"caesar\tcaesar\tcaesar\t500\t\t\t16384\t12\n"
"gaius\tgaius\tgaius\t500\t\t\t8192\t11"

Definition at line 523 of file install.c.

◆ cie_media_dat

const CHAR cie_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t1\t\ttest1.cab\tDISK1\t\n"
"2\t2\t\ttest2.cab\tDISK2\t\n"
"3\t12\t\ttest3.cab\tDISK3\t\n"

Definition at line 531 of file install.c.

◆ cie_tables

const msi_table cie_tables[]
static
Initial value:
=
{
ADD_TABLE(cie_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cie_feature_comp),
ADD_TABLE(cie_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(cie_media),
}

Definition at line 1688 of file install.c.

Referenced by test_cabisextracted().

◆ co2_media_dat

const CHAR co2_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t10\t\ttest1.cab\tDISK1\t\n"
"2\t12\t\ttest3.cab\tDISK3\t\n"
"3\t2\t\ttest2.cab\tDISK2\t\n"

Definition at line 394 of file install.c.

◆ co2_tables

const msi_table co2_tables[]
static
Initial value:
=
{
ADD_TABLE(cc_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(cc_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(co2_media),
}

Definition at line 1601 of file install.c.

Referenced by test_caborder().

◆ co_file_dat

const CHAR co_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
"augustus\taugustus\taugustus\t50000\t\t\t16384\t2\n"
"caesar\tcaesar\tcaesar\t500\t\t\t16384\t3"

Definition at line 380 of file install.c.

◆ co_media_dat

const CHAR co_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t10\t\ttest1.cab\tDISK1\t\n"
"2\t2\t\ttest2.cab\tDISK2\t\n"
"3\t3\t\ttest3.cab\tDISK3\t\n"

Definition at line 387 of file install.c.

◆ co_tables

const msi_table co_tables[]
static
Initial value:
=
{
ADD_TABLE(cc_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(co_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(co_media),
}

Definition at line 1589 of file install.c.

Referenced by test_caborder().

◆ COMMON_FILES_DIR

char COMMON_FILES_DIR[MAX_PATH]

Definition at line 68 of file install.c.

Referenced by delete_cf(), and get_system_dirs().

◆ component_dat

const CHAR component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"Five\t{8CC92E9D-14B2-4CA4-B2AA-B11D02078087}\tNEWDIR\t2\t\tfive.txt\n"
"Four\t{FD37B4EA-7209-45C0-8917-535F35A2F080}\tCABOUTDIR\t2\t\tfour.txt\n"
"One\t{783B242E-E185-4A56-AF86-C09815EC053C}\tMSITESTDIR\t2\tNOT REINSTALL\tone.txt\n"
"Three\t{010B6ADD-B27D-4EDD-9B3D-34C4F7D61684}\tCHANGEDDIR\t2\t\tthree.txt\n"
"Two\t{BF03D1A6-20DA-4A65-82F3-6CAC995915CE}\tFIRSTDIR\t2\t\ttwo.txt\n"
"dangler\t{6091DF25-EF96-45F1-B8E9-A9B1420C7A3C}\tTARGETDIR\t4\t\tregdata\n"
"component\t\tMSITESTDIR\t0\t1\tfile\n"

Definition at line 76 of file install.c.

◆ condition_dat

const CHAR condition_dat[]
static
Initial value:
= "Feature_\tLevel\tCondition\n"
"s38\ti2\tS255\n"
"Condition\tFeature_\tLevel\n"
"One\t4\t1\n"

Definition at line 246 of file install.c.

◆ CURR_DIR

char CURR_DIR[MAX_PATH]

Definition at line 65 of file install.c.

◆ customdll

const char* customdll
static

Definition at line 72 of file install.c.

Referenced by add_custom_dll(), and START_TEST().

◆ cwd_component_dat

const CHAR cwd_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"augustus\t\tMSITESTDIR\t0\t\taugustus\n"

Definition at line 577 of file install.c.

◆ cwd_tables

const msi_table cwd_tables[]
static
Initial value:
=
{
ADD_TABLE(cwd_component),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1712 of file install.c.

Referenced by test_currentworkingdir().

◆ da_custom_action_dat

const char da_custom_action_dat[]
static
Initial value:
=
"Action\tType\tSource\tTarget\n"
"s72\ti2\tS64\tS0\n"
"CustomAction\tAction\n"
"setprop\t51\tdeferred\t[TESTPATH]\n"
"immediate\t1\tcustom.dll\tda_immediate\n"
"deferred\t1025\tcustom.dll\tda_deferred\n"

Definition at line 1339 of file install.c.

◆ da_install_exec_seq_dat

const char da_install_exec_seq_dat[]
static
Initial value:
=
"Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostInitialize\t\t200\n"
"FileCost\t\t300\n"
"CostFinalize\t\t400\n"
"InstallInitialize\t\t500\n"
"setprop\t\t600\n"
"deferred\t\t700\n"
"immediate\t\t800\n"
"InstallFinalize\t\t1100\n"

Definition at line 1347 of file install.c.

◆ da_tables

const msi_table da_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(da_install_exec_seq),
ADD_TABLE(da_custom_action),
}

Definition at line 2080 of file install.c.

Referenced by test_deferred_action().

◆ data

Definition at line 3756 of file install.c.

Referenced by test_int_widths().

◆ data1

const char data1[]
static
Initial value:
=
"propval"

Definition at line 3740 of file install.c.

◆ data2

const WCHAR data2[]
static
Initial value:
= {
0, 0,
4, 1,
3, 1,
}

Definition at line 3743 of file install.c.

◆ data3

const WCHAR data3[]
static
Initial value:
= {
0x0201, 0x0001, 0x0002,
}

Definition at line 3750 of file install.c.

◆ directory_dat

const CHAR directory_dat[]
static
Initial value:
= "Directory\tDirectory_Parent\tDefaultDir\n"
"s72\tS72\tl255\n"
"Directory\tDirectory\n"
"CABOUTDIR\tMSITESTDIR\tcabout\n"
"CHANGEDDIR\tMSITESTDIR\tchanged:second\n"
"FIRSTDIR\tMSITESTDIR\tfirst\n"
"MSITESTDIR\tProgramFilesFolder\tmsitest\n"
"NEWDIR\tCABOUTDIR\tnew\n"
"ProgramFilesFolder\tTARGETDIR\t.\n"
"TARGETDIR\t\tSourceDir"

Definition at line 87 of file install.c.

◆ DWORD

Definition at line 43 of file install.c.

◆ feature_comp_dat

const CHAR feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"Five\tFive\n"
"Four\tFour\n"
"One\tOne\n"
"Three\tThree\n"
"Two\tTwo\n"
"feature\tcomponent\n"

Definition at line 108 of file install.c.

◆ feature_dat

const CHAR feature_dat[]
static
Initial value:
= "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"Five\t\tFive\tThe Five Feature\t5\t3\tNEWDIR\t0\n"
"Four\t\tFour\tThe Four Feature\t4\t3\tCABOUTDIR\t0\n"
"One\t\tOne\tThe One Feature\t1\t3\tMSITESTDIR\t0\n"
"Three\t\tThree\tThe Three Feature\t3\t3\tCHANGEDDIR\t0\n"
"Two\t\tTwo\tThe Two Feature\t2\t3\tFIRSTDIR\t0\n"
"feature\t\t\t\t2\t1\tTARGETDIR\t0\n"

Definition at line 98 of file install.c.

◆ file_dat

const CHAR file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"five.txt\tFive\tfive.txt\t1000\t\t\t16384\t5\n"
"four.txt\tFour\tfour.txt\t1000\t\t\t16384\t4\n"
"one.txt\tOne\tone.txt\t1000\t\t\t0\t1\n"
"three.txt\tThree\tthree.txt\t1000\t\t\t0\t3\n"
"two.txt\tTwo\ttwo.txt\t1000\t\t\t0\t2\n"
"file\tcomponent\tfilename\t100\t\t\t8192\t1\n"

Definition at line 118 of file install.c.

◆ fiu_tables

const msi_table fiu_tables[]
static
Initial value:
=
{
ADD_TABLE(rof_component),
ADD_TABLE(rof_feature),
ADD_TABLE(rof_feature_comp),
ADD_TABLE(rof_file),
ADD_TABLE(pp_install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1941 of file install.c.

Referenced by test_file_in_use().

◆ fiuc_tables

const msi_table fiuc_tables[]
static
Initial value:
=
{
ADD_TABLE(rof_component),
ADD_TABLE(rof_feature),
ADD_TABLE(rof_feature_comp),
ADD_TABLE(rofc_file),
ADD_TABLE(pp_install_exec_seq),
ADD_TABLE(rofc_media),
}

Definition at line 1953 of file install.c.

Referenced by test_file_in_use_cab().

◆ fo_component_dat

const CHAR fo_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"override\t{0A00FB1D-97B0-4B42-ADF0-BB8913416623}\tMSITESTDIR\t0\t\toverride.txt\n"
"preselected\t{44E1DB75-605A-43DD-8CF5-CAB17F1BBD60}\tMSITESTDIR\t0\t\tpreselected.txt\n"
"notpreselected\t{E1647733-5E75-400A-A92E-5E60B4D4EF9F}\tMSITESTDIR\t0\t\tnotpreselected.txt\n"

Definition at line 979 of file install.c.

◆ fo_condition_dat

const CHAR fo_condition_dat[]
static
Initial value:
= "Feature_\tLevel\tCondition\n"
"s38\ti2\tS255\n"
"Condition\tFeature_\tLevel\n"
"preselected\t0\tPreselected AND NOT REMOVE\n"
"notpreselected\t0\tNOT Preselected AND NOT REMOVE\n"

Definition at line 966 of file install.c.

◆ fo_custom_action_dat

const CHAR fo_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"SetPreselected\t51\tPreselected\t1\t\n"

Definition at line 986 of file install.c.

◆ fo_feature_comp_dat

const CHAR fo_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"override\toverride\n"
"preselected\tpreselected\n"
"notpreselected\tnotpreselected\n"

Definition at line 972 of file install.c.

◆ fo_feature_dat

const CHAR fo_feature_dat[]
static
Initial value:
= "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"override\t\t\toverride feature\t1\t1\tMSITESTDIR\t0\n"
"preselected\t\t\tpreselected feature\t1\t1\tMSITESTDIR\t0\n"
"notpreselected\t\t\tnotpreselected feature\t1\t1\tMSITESTDIR\t0\n"

Definition at line 959 of file install.c.

◆ fo_file_dat

const CHAR fo_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"override.txt\toverride\toverride.txt\t1000\t\t\t8192\t1\n"
"preselected.txt\tpreselected\tpreselected.txt\t1000\t\t\t8192\t2\n"
"notpreselected.txt\tnotpreselected\tnotpreselected.txt\t1000\t\t\t8192\t3\n"

Definition at line 952 of file install.c.

◆ fo_install_exec_seq_dat

const CHAR fo_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"LaunchConditions\t\t100\n"
"SetPreselected\tpreselect=1\t200\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"CostFinalize\t\t1000\n"
"InstallValidate\t\t1400\n"
"InstallInitialize\t\t1500\n"
"ProcessComponents\t\t1600\n"
"RemoveFiles\t\t1700\n"
"InstallFiles\t\t2000\n"
"RegisterProduct\t\t5000\n"
"PublishFeatures\t\t5100\n"
"PublishProduct\t\t5200\n"
"UnpublishFeatures\t\t5300\n"
"InstallFinalize\t\t6000\n"

Definition at line 991 of file install.c.

◆ fo_tables

const msi_table fo_tables[]
static
Initial value:
=
{
ADD_TABLE(fo_file),
ADD_TABLE(fo_component),
ADD_TABLE(fo_feature),
ADD_TABLE(fo_condition),
ADD_TABLE(fo_feature_comp),
ADD_TABLE(fo_custom_action),
ADD_TABLE(fo_install_exec_seq),
}

Definition at line 1965 of file install.c.

Referenced by test_feature_override().

◆ ft_comp_dat

const char ft_comp_dat[]
static
Initial value:
=
"Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"comp\t{12345678-1234-1234-1234-222222222222}\tTARGETDIR\t0\t\t\n"
"comp2\t{12345678-1234-1234-1234-333333333333}\tTARGETDIR\t0\t\tfeaturetree\n"

Definition at line 1281 of file install.c.

◆ ft_condition_dat

const char ft_condition_dat[]
static
Initial value:
=
"Feature_\tLevel\tCondition\n"
"s38\ti2\tS255\n"
"Condition\tFeature_\tLevel\n"
"A\t0\t\"0\"<>INSTALLTYPE\n"

Definition at line 1304 of file install.c.

◆ ft_custom_action_dat

const char ft_custom_action_dat[]
static
Initial value:
=
"Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"Run A\t19\t\tA\t\n"
"Run B\t19\t\tB\t\n"
"Run C\t19\t\tC\t\n"

Definition at line 1310 of file install.c.

◆ ft_feature_comp_dat

const char ft_feature_comp_dat[]
static
Initial value:
=
"Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"C\tcomp\n"
"D\tcomp2\n"

Definition at line 1297 of file install.c.

◆ ft_feature_dat

const char ft_feature_dat[]
static
Initial value:
=
"Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"A\t\t\t\t2\t1\t\t0\n"
"C\tB\t\t\t2\t1\t\t0\n"
"B\tA\t\t\t4\t1\t\t0\n"
"D\t\t\t\t2\t1\t\t0\n"

Definition at line 1288 of file install.c.

◆ ft_file_dat

const char ft_file_dat[]
static
Initial value:
=
"File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"featuretree\tcomp\tfeaturetree.txt\t1000\t\t\t8192\t1\n"

Definition at line 1275 of file install.c.

◆ ft_install_exec_seq_dat

const char ft_install_exec_seq_dat[]
static
Initial value:
=
"Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostInitialize\t\t100\n"
"FileCost\t\t200\n"
"CostFinalize\t\t300\n"
"InstallValidate\t\t400\n"
"InstallInitialize\t\t500\n"
"Run C\t3 = &C AND NOT Installed\t600\n"
"Run B\t3 = &B AND NOT Installed\t700\n"
"Run A\t3 = &A AND NOT Installed\t800\n"
"ProcessComponents\t\t900\n"
"RemoveFiles\t\t1000\n"
"InstallFiles\t\t1100\n"
"RegisterProduct\t\t1200\n"
"PublishFeatures\t\t1300\n"
"PublishProduct\t\t1400\n"
"UnpublishFeatures\t\t1450\n"
"InstallFinalize\t\t1500\n"

Definition at line 1318 of file install.c.

◆ ft_tables

const msi_table ft_tables[]
static
Initial value:
=
{
ADD_TABLE(ft_file),
ADD_TABLE(ft_comp),
ADD_TABLE(ft_feature),
ADD_TABLE(ft_feature_comp),
ADD_TABLE(ft_condition),
ADD_TABLE(ft_custom_action),
ADD_TABLE(ft_install_exec_seq),
}

Definition at line 2066 of file install.c.

Referenced by test_feature_tree().

◆ icon_base_tables

const msi_table icon_base_tables[]
static
Initial value:
=
{
ADD_TABLE(ci_component),
ADD_TABLE(rof_feature),
ADD_TABLE(rof_feature_comp),
ADD_TABLE(rof_file),
ADD_TABLE(pp_install_exec_seq),
ADD_TABLE(rof_media),
ADD_TABLE(icon_property),
}

Definition at line 1979 of file install.c.

Referenced by test_icon_table(), and test_remove_upgrade_code().

◆ icon_property_dat

const CHAR icon_property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"DefaultUIFont\tDlgFont8\n"
"HASUIRUN\t0\n"
"INSTALLLEVEL\t3\n"
"InstallMode\tTypical\n"
"Manufacturer\tWine\n"
"PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
"ProductCode\t{7DF88A49-996F-4EC8-A022-BF956F9B2CBB}\n"
"ProductID\tnone\n"
"ProductLanguage\t1033\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.1\n"
"PROMPTROLLBACKCOST\tP\n"
"Setup\tSetup\n"
"UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
"AdminProperties\tPOSTADMIN\n"
"ROOTDRIVE\tC:\\\n"
"MSIFASTINSTALL\t1\n"

Definition at line 220 of file install.c.

◆ install_exec_seq_dat

const CHAR install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"AllocateRegistrySpace\tNOT Installed\t1550\n"
"CostFinalize\t\t1000\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"ResolveSource\t\t950\n"
"MoveFiles\t\t1700\n"
"InstallFiles\t\t4000\n"
"BindImage\t\t4100\n"
"DuplicateFiles\t\t4500\n"
"WriteEnvironmentStrings\t\t4550\n"
"CreateShortcuts\t\t4600\n"
"InstallFinalize\t\t6600\n"
"InstallInitialize\t\t1500\n"
"InstallValidate\t\t1400\n"
"LaunchConditions\t\t100\n"
"WriteRegistryValues\tSourceDir And SOURCEDIR\t5000"

Definition at line 128 of file install.c.

◆ ip_custom_action_dat

const CHAR ip_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"TestInstalledProp\t19\t\tTest failed\t\n"

Definition at line 879 of file install.c.

◆ ip_install_exec_seq_dat

const CHAR ip_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostFinalize\t\t1000\n"
"ValidateProductID\t\t700\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"RemoveFiles\t\t3500\n"
"InstallFiles\t\t4000\n"
"RegisterUser\t\t6000\n"
"RegisterProduct\t\t6100\n"
"PublishFeatures\t\t6300\n"
"PublishProduct\t\t6400\n"
"InstallFinalize\t\t6600\n"
"InstallInitialize\t\t1500\n"
"ProcessComponents\t\t1600\n"
"UnpublishFeatures\t\t1800\n"
"InstallValidate\t\t1400\n"
"LaunchConditions\t\t100\n"
"TestInstalledProp\tInstalled AND NOT REMOVE\t950\n"

Definition at line 858 of file install.c.

◆ ip_tables

const msi_table ip_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(ip_install_exec_seq),
ADD_TABLE(ip_custom_action),
}

Definition at line 1876 of file install.c.

Referenced by test_installed_prop().

◆ is_64bit

const BOOL is_64bit = sizeof(void *) > sizeof(int)
static

Definition at line 56 of file install.c.

Referenced by test_mixed_package(), and test_package_validation().

◆ is_component_dat

const CHAR is_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"alpha\t\tMSITESTDIR\t0\t\talpha_file\n"
"beta\t\tMSITESTDIR\t1\t\tbeta_file\n"
"gamma\t\tMSITESTDIR\t2\t\tgamma_file\n"
"theta\t\tMSITESTDIR\t0\t\ttheta_file\n"
"delta\t\tMSITESTDIR\t1\t\tdelta_file\n"
"epsilon\t\tMSITESTDIR\t2\t\tepsilon_file\n"
"zeta\t\tMSITESTDIR\t0\t\tzeta_file\n"
"iota\t\tMSITESTDIR\t1\t\tiota_file\n"
"eta\t\tMSITESTDIR\t2\t\teta_file\n"
"kappa\t\tMSITESTDIR\t0\t\tkappa_file\n"
"lambda\t\tMSITESTDIR\t1\t\tlambda_file\n"
"mu\t\tMSITESTDIR\t2\t\tmu_file\n"

Definition at line 752 of file install.c.

◆ is_feature_comp_dat

const CHAR is_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"one\talpha\n"
"one\tbeta\n"
"one\tgamma\n"
"two\ttheta\n"
"two\tdelta\n"
"two\tepsilon\n"
"three\tzeta\n"
"three\tiota\n"
"three\teta\n"
"four\tkappa\n"
"four\tlambda\n"
"four\tmu"

Definition at line 768 of file install.c.

◆ is_feature_dat

const CHAR is_feature_dat[]
static
Initial value:
= "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"one\t\t\t\t2\t1\t\t0\n"
"two\t\t\t\t2\t1\t\t1\n"
"three\t\t\t\t2\t1\t\t4\n"
"four\t\t\t\t2\t0\t\t0"

Definition at line 744 of file install.c.

◆ is_file_dat

const CHAR is_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"alpha_file\talpha\talpha\t500\t\t\t8192\t1\n"
"beta_file\tbeta\tbeta\t500\t\t\t8291\t2\n"
"gamma_file\tgamma\tgamma\t500\t\t\t8192\t3\n"
"theta_file\ttheta\ttheta\t500\t\t\t8192\t4\n"
"delta_file\tdelta\tdelta\t500\t\t\t8192\t5\n"
"epsilon_file\tepsilon\tepsilon\t500\t\t\t8192\t6\n"
"zeta_file\tzeta\tzeta\t500\t\t\t8192\t7\n"
"iota_file\tiota\tiota\t500\t\t\t8192\t8\n"
"eta_file\teta\teta\t500\t\t\t8192\t9\n"
"kappa_file\tkappa\tkappa\t500\t\t\t8192\t10\n"
"lambda_file\tlambda\tlambda\t500\t\t\t8192\t11\n"
"mu_file\tmu\tmu\t500\t\t\t8192\t12"

Definition at line 784 of file install.c.

◆ is_media_dat

const CHAR is_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t12\t\t\tDISK1\t\n"

Definition at line 800 of file install.c.

◆ is_tables

const msi_table is_tables[]
static
Initial value:
=
{
ADD_TABLE(is_component),
ADD_TABLE(is_feature),
ADD_TABLE(is_feature_comp),
ADD_TABLE(is_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(is_media),
}

Definition at line 1804 of file install.c.

Referenced by test_installstate().

◆ is_wow64

◆ LPCSTR

Definition at line 41 of file install.c.

◆ LPDWORD

Definition at line 43 of file install.c.

◆ LPSTR

Definition at line 43 of file install.c.

◆ mc_component_dat

const CHAR mc_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"maximus\t\tMSITESTDIR\t0\t1\tmaximus\n"
"augustus\t\tMSITESTDIR\t0\t1\taugustus\n"
"caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"
"gaius\t\tMSITESTDIR\t0\tGAIUS=1\tgaius\n"
"tiberius\t\tMSITESTDIR\t0\t\ttiberius\n"

Definition at line 628 of file install.c.

◆ mc_file_dat

const CHAR mc_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t16384\t1\n"
"augustus\taugustus\taugustus\t500\t\t\t0\t2\n"
"caesar\tcaesar\tcaesar\t500\t\t\t16384\t3\n"
"gaius\tgaius\tgaius\t500\t\t\t16384\t4\n"
"tiberius\ttiberius\ttiberius\t500\t\t\t0\t5\n"

Definition at line 637 of file install.c.

◆ mc_file_hash_dat

const CHAR mc_file_hash_dat[]
static
Initial value:
= "File_\tOptions\tHashPart1\tHashPart2\tHashPart3\tHashPart4\n"
"s72\ti2\ti4\ti4\ti4\ti4\n"
"MsiFileHash\tFile_\n"
"caesar\t0\t850433704\t-241429251\t675791761\t-1221108824"

Definition at line 655 of file install.c.

◆ mc_media_dat

const CHAR mc_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t1\t\ttest1.cab\tDISK1\t\n"
"2\t2\t\ttest2.cab\tDISK2\t\n"
"3\t3\t\ttest3.cab\tDISK3\t\n"
"4\t4\t\ttest3.cab\tDISK3\t\n"
"5\t5\t\ttest4.cab\tDISK4\t\n"

Definition at line 646 of file install.c.

◆ mc_tables

const msi_table mc_tables[]
static
Initial value:
=
{
ADD_TABLE(mc_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cie_feature_comp),
ADD_TABLE(mc_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(mc_media),
ADD_TABLE(mc_file_hash),
}

Definition at line 1750 of file install.c.

Referenced by test_missingcab().

◆ mcp_component_dat

const CHAR mcp_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"hydrogen\t{C844BD1E-1907-4C00-8BC9-150BD70DF0A1}\tMSITESTDIR\t2\t\thydrogen\n"
"helium\t{5AD3C142-CEF8-490D-B569-784D80670685}\tMSITESTDIR\t2\t\thelium\n"
"lithium\t{4AF28FFC-71C7-4307-BDE4-B77C5338F56F}\tMSITESTDIR\t2\tPROPVAR=42\tlithium\n"

Definition at line 819 of file install.c.

◆ mcp_feature_comp_dat

const CHAR mcp_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"hydroxyl\thydrogen\n"
"heliox\thelium\n"
"lithia\tlithium"

Definition at line 833 of file install.c.

◆ mcp_feature_dat

const CHAR mcp_feature_dat[]
static
Initial value:
= "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"hydroxyl\t\thydroxyl\thydroxyl\t2\t1\tTARGETDIR\t0\n"
"heliox\t\theliox\theliox\t2\t5\tTARGETDIR\t0\n"
"lithia\t\tlithia\tlithia\t2\t10\tTARGETDIR\t0"

Definition at line 826 of file install.c.

◆ mcp_file_dat

const CHAR mcp_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"hydrogen\thydrogen\thydrogen\t0\t\t\t8192\t1\n"
"helium\thelium\thelium\t0\t\t\t8192\t1\n"
"lithium\tlithium\tlithium\t0\t\t\t8192\t1\n"
"beryllium\tmissingcomp\tberyllium\t0\t\t\t8192\t1"

Definition at line 840 of file install.c.

◆ mcp_tables

const msi_table mcp_tables[]
static
Initial value:
=
{
ADD_TABLE(mcp_component),
ADD_TABLE(mcp_feature),
ADD_TABLE(mcp_feature_comp),
ADD_TABLE(mcp_file),
ADD_TABLE(rem_install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1828 of file install.c.

Referenced by test_missingcomponent().

◆ media_dat

const CHAR media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t3\t\t\tDISK1\t\n"
"2\t5\t\tmsitest.cab\tDISK2\t\n"

Definition at line 148 of file install.c.

◆ mixed_component_dat

const char mixed_component_dat[]
static
Initial value:
=
"Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"comp1\t{DE9F0EF4-0ED3-495A-8105-060C0EA457B8}\tTARGETDIR\t4\t\tregdata1\n"
"comp2\t{4912DBE7-FC3A-4F91-BB5C-88F5C15C19A5}\tTARGETDIR\t260\t\tregdata2\n"

Definition at line 1072 of file install.c.

◆ mixed_feature_comp_dat

const char mixed_feature_comp_dat[]
static
Initial value:
=
"Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"feature1\tcomp1\n"
"feature2\tcomp2\n"

Definition at line 1065 of file install.c.

◆ mixed_feature_dat

const char mixed_feature_dat[]
static
Initial value:
=
"Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"feature1\t\t\t\t1\t2\tMSITESTDIR\t0\n"
"feature2\t\t\t\t1\t2\tMSITESTDIR\t0\n"

Definition at line 1058 of file install.c.

◆ mixed_install_exec_seq_dat

const char mixed_install_exec_seq_dat[]
static
Initial value:
=
"Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"LaunchConditions\t\t100\n"
"CostInitialize\t\t200\n"
"FileCost\t\t300\n"
"CostFinalize\t\t400\n"
"InstallValidate\t\t500\n"
"InstallInitialize\t\t600\n"
"ProcessComponents\t\t700\n"
"UnpublishFeatures\t\t800\n"
"RemoveRegistryValues\t\t900\n"
"WriteRegistryValues\t\t1000\n"
"RegisterProduct\t\t1100\n"
"PublishFeatures\t\t1200\n"
"PublishProduct\t\t1300\n"
"InstallFinalize\t\t1400\n"

Definition at line 1090 of file install.c.

◆ mixed_registry_dat

const char mixed_registry_dat[]
static
Initial value:
=
"Registry\tRoot\tKey\tName\tValue\tComponent_\n"
"s72\ti2\tl255\tL255\tL0\ts72\n"
"Registry\tRegistry\n"
"regdata1\t2\tSOFTWARE\\Wine\\msitest\ttest1\t\tcomp1\n"
"regdata2\t2\tSOFTWARE\\Wine\\msitest\ttest2\t\tcomp2\n"
"regdata3\t0\tCLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\t\tCLSID_Winetest32\tcomp1\n"
"regdata4\t0\tCLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32\t\twinetest32.dll\tcomp1\n"
"regdata5\t0\tCLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\t\tCLSID_Winetest64\tcomp2\n"
"regdata6\t0\tCLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32\t\twinetest64.dll\tcomp2\n"

Definition at line 1079 of file install.c.

◆ mixed_tables

const msi_table mixed_tables[]
static
Initial value:
=
{
ADD_TABLE(mixed_component),
ADD_TABLE(mixed_feature),
ADD_TABLE(mixed_feature_comp),
ADD_TABLE(mixed_install_exec_seq),
ADD_TABLE(mixed_registry),
}

Definition at line 2015 of file install.c.

Referenced by test_mixed_package().

◆ mm_file_dat

const CHAR mm_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t512\t1\n"
"augustus\taugustus\taugustus\t500\t\t\t512\t2\n"
"caesar\tcaesar\tcaesar\t500\t\t\t16384\t3"

Definition at line 401 of file install.c.

◆ mm_media_dat

const CHAR mm_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t3\t\ttest1.cab\tDISK1\t\n"

Definition at line 408 of file install.c.

◆ mm_tables

const msi_table mm_tables[]
static
Initial value:
=
{
ADD_TABLE(cc_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(mm_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(mm_media),
}

Definition at line 1613 of file install.c.

Referenced by test_mixedmedia().

◆ msifile

◆ msifile2

const char* msifile2 = "winetest2.msi"
static

Definition at line 59 of file install.c.

Referenced by generate_transform(), test_shared_component(), and test_transformprop().

◆ msifile2W

const WCHAR msifile2W[] = L"msitest2.msi"
static

Definition at line 63 of file install.c.

Referenced by generate_transform().

◆ msifileW

const WCHAR msifileW[] = L"msitest.msi"
static

◆ MSIINSTALLCONTEXT

Definition at line 41 of file install.c.

◆ mstfile

const char* mstfile = "winetest.mst"
static

◆ name

Definition at line 3755 of file install.c.

◆ name1

const WCHAR name1[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3b6a, 0x45e4, 0x4824, 0 }
static

Definition at line 3735 of file install.c.

◆ name2

const WCHAR name2[] = { 0x4840, 0x3f3f, 0x4577, 0x446c, 0x3e6a, 0x44b2, 0x482f, 0 }
static

Definition at line 3736 of file install.c.

◆ name3

const WCHAR name3[] = { 0x4840, 0x4559, 0x44f2, 0x4568, 0x4737, 0 }
static

Definition at line 3737 of file install.c.

◆ PBOOL

Definition at line 48 of file install.c.

◆ pc_tables

const msi_table pc_tables[]
static
Initial value:
=
{
ADD_TABLE(ca51_component),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1864 of file install.c.

Referenced by test_propcase().

◆ pp_install_exec_seq_dat

const CHAR pp_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"ValidateProductID\t\t700\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"CostFinalize\t\t1000\n"
"InstallValidate\t\t1400\n"
"InstallInitialize\t\t1500\n"
"ProcessComponents\tPROCESS_COMPONENTS=1 Or FULL=1\t1600\n"
"UnpublishFeatures\tUNPUBLISH_FEATURES=1 Or FULL=1\t1800\n"
"RemoveFiles\t\t3500\n"
"InstallFiles\t\t4000\n"
"RegisterUser\tREGISTER_USER=1 Or FULL=1\t6000\n"
"RegisterProduct\tREGISTER_PRODUCT=1 Or FULL=1\t6100\n"
"PublishFeatures\tPUBLISH_FEATURES=1 Or FULL=1\t6300\n"
"PublishProduct\tPUBLISH_PRODUCT=1 Or FULL=1\t6400\n"
"InstallFinalize\t\t6600"

Definition at line 553 of file install.c.

◆ PROG_FILES_DIR

◆ PROG_FILES_DIR_NATIVE

char PROG_FILES_DIR_NATIVE[MAX_PATH]

Definition at line 67 of file install.c.

Referenced by delete_pf_native(), and get_system_dirs().

◆ property_dat

const CHAR property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"DefaultUIFont\tDlgFont8\n"
"HASUIRUN\t0\n"
"INSTALLLEVEL\t3\n"
"InstallMode\tTypical\n"
"Manufacturer\tWine\n"
"PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
"PRIMARYFOLDER\tTARGETDIR\n"
"ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
"ProductID\tnone\n"
"ProductLanguage\t1033\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.1\n"
"PROMPTROLLBACKCOST\tP\n"
"Setup\tSetup\n"
"UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
"AdminProperties\tPOSTADMIN\n"
"ROOTDRIVE\tC:\\\n"
"MSIFASTINSTALL\t1\n"

Definition at line 154 of file install.c.

◆ ps_tables

const msi_table ps_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(install_exec_seq),
}

Definition at line 1449 of file install.c.

Referenced by test_preselected().

◆ pv_install_exec_seq_dat

const CHAR pv_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"LaunchConditions\t\t100\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"CostFinalize\t\t1000\n"
"InstallValidate\t\t1400\n"
"InstallInitialize\t\t1500\n"
"InstallFiles\t\t4000\n"
"InstallFinalize\t\t6600\n"

Definition at line 495 of file install.c.

◆ pv_tables

const msi_table pv_tables[]
static
Initial value:
=
{
ADD_TABLE(rof_component),
ADD_TABLE(rof_feature),
ADD_TABLE(rof_feature_comp),
ADD_TABLE(rof_file),
ADD_TABLE(pv_install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1991 of file install.c.

Referenced by test_package_validation().

◆ registry_dat

const CHAR registry_dat[]
static
Initial value:
= "Registry\tRoot\tKey\tName\tValue\tComponent_\n"
"s72\ti2\tl255\tL255\tL0\ts72\n"
"Registry\tRegistry\n"
"Apples\t1\tSOFTWARE\\Wine\\msitest\tName\timaname\tOne\n"
"Oranges\t1\tSOFTWARE\\Wine\\msitest\tnumber\t#314\tTwo\n"
"regdata\t1\tSOFTWARE\\Wine\\msitest\tblah\tbad\tdangler\n"
"OrderTest\t1\tSOFTWARE\\Wine\\msitest\tOrderTestName\tOrderTestValue\tcomponent"

Definition at line 316 of file install.c.

◆ REGSAM

Definition at line 47 of file install.c.

◆ rem_install_exec_seq_dat

const CHAR rem_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"ValidateProductID\t\t700\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"CostFinalize\t\t1000\n"
"InstallValidate\t\t1400\n"
"InstallInitialize\t\t1500\n"
"ProcessComponents\t\t1600\n"
"UnpublishFeatures\t\t1800\n"
"RemoveFiles\t\t3500\n"
"InstallFiles\t\t4000\n"
"RegisterProduct\t\t6100\n"
"PublishFeatures\t\t6300\n"
"PublishProduct\t\t6400\n"
"InstallFinalize\t\t6600"

Definition at line 610 of file install.c.

◆ rename_ops

const char rename_ops[] = "PendingFileRenameOperations"
static

Definition at line 5255 of file install.c.

Referenced by process_pending_renames().

◆ rof_component_dat

const CHAR rof_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"maximus\t\tMSITESTDIR\t0\t1\tmaximus\n"

Definition at line 439 of file install.c.

◆ rof_feature_comp_dat

const CHAR rof_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"feature\tmaximus\n"
"montecristo\tmaximus"

Definition at line 450 of file install.c.

◆ rof_feature_dat

const CHAR rof_feature_dat[]
static
Initial value:
= "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"feature\t\tFeature\tFeature\t2\t1\tTARGETDIR\t0\n"
"montecristo\t\tFeature\tFeature\t2\t1\tTARGETDIR\t0"

Definition at line 444 of file install.c.

◆ rof_file_dat

const CHAR rof_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t8192\t1"

Definition at line 456 of file install.c.

◆ rof_media_dat

const CHAR rof_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t1\t\t\tDISK1\t\n"

Definition at line 461 of file install.c.

◆ rof_tables

const msi_table rof_tables[]
static
Initial value:
=
{
ADD_TABLE(rof_component),
ADD_TABLE(rof_feature),
ADD_TABLE(rof_feature_comp),
ADD_TABLE(rof_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1651 of file install.c.

Referenced by test_readonlyfile().

◆ rofc_file_dat

const CHAR rofc_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"maximus\tmaximus\tmaximus\t500\t\t\t16384\t1"

Definition at line 466 of file install.c.

◆ rofc_media_dat

const CHAR rofc_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t1\t\ttest1.cab\tDISK1\t\n"

Definition at line 471 of file install.c.

◆ rofc_tables

const msi_table rofc_tables[]
static
Initial value:
=
{
ADD_TABLE(rof_component),
ADD_TABLE(rof_feature),
ADD_TABLE(rof_feature_comp),
ADD_TABLE(rofc_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rofc_media),
}

Definition at line 1663 of file install.c.

Referenced by test_readonlyfile_cab().

◆ sc_tables

const msi_table sc_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(install_exec_seq),
}

Definition at line 1436 of file install.c.

Referenced by test_shortcut().

◆ sdp_custom_action_dat

const CHAR sdp_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"SetDirProperty\t51\tMSITESTDIR\t[CommonFilesFolder]msitest\\\t\n"

Definition at line 490 of file install.c.

◆ sdp_install_exec_seq_dat

const CHAR sdp_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"AllocateRegistrySpace\tNOT Installed\t1550\n"
"CostFinalize\t\t1000\n"
"CostInitialize\t\t800\n"
"FileCost\t\t900\n"
"InstallFiles\t\t4000\n"
"InstallFinalize\t\t6600\n"
"InstallInitialize\t\t1500\n"
"InstallValidate\t\t1400\n"
"LaunchConditions\t\t100\n"
"SetDirProperty\t\t950"

Definition at line 476 of file install.c.

◆ sdp_tables

const msi_table sdp_tables[]
static
Initial value:
=
{
ADD_TABLE(rof_component),
ADD_TABLE(rof_feature),
ADD_TABLE(rof_feature_comp),
ADD_TABLE(rof_file),
ADD_TABLE(sdp_install_exec_seq),
ADD_TABLE(sdp_custom_action),
ADD_TABLE(rof_media),
}

Definition at line 1675 of file install.c.

Referenced by test_setdirproperty().

◆ session_manager

const char session_manager[] = "System\\CurrentControlSet\\Control\\Session Manager"
static

Definition at line 5254 of file install.c.

Referenced by test_file_in_use(), and test_file_in_use_cab().

◆ sf_tables

const msi_table sf_tables[]
static
Initial value:
=
{
ADD_TABLE(wrv_component),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1763 of file install.c.

Referenced by test_sourcefolder().

◆ shc2_install_exec_seq_dat

const char shc2_install_exec_seq_dat[]
static
Initial value:
=
"Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"LaunchConditions\t\t100\n"
"CostInitialize\t\t200\n"
"FileCost\t\t300\n"
"CostFinalize\t\t600\n"
"TestRemoveAction\tREMOVE AND ($sharedcomponent <> 2)\t700\n"
"InstallValidate\t\t900\n"
"InstallInitialize\t\t1200\n"
"ProcessComponents\t\t1300\n"
"RemoveFiles\t\t1400\n"
"InstallFiles\t\t1500\n"
"TestComponentAction\tNOT REMOVE AND ($sharedcomponent <> 3)\t1600\n"
"RegisterProduct\t\t1700\n"
"PublishFeatures\t\t1800\n"
"PublishProduct\t\t1900\n"
"UnpublishFeatures\t\t1950\n"
"InstallFinalize\t\t2000\n"

Definition at line 1254 of file install.c.

◆ shc2_property_dat

const char shc2_property_dat[]
static
Initial value:
=
"Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"INSTALLLEVEL\t3\n"
"ProductCode\t{4CEFADE5-DAFB-4C21-8EF2-4ED4F139F340}\n"
"ProductName\tMSITEST2\n"
"ProductVersion\t1.1.1\n"
"MSIFASTINSTALL\t1\n"

Definition at line 1191 of file install.c.

◆ shc2_tables

const msi_table shc2_tables[]
static
Initial value:
=
{
ADD_TABLE(shc_file),
ADD_TABLE(shc_component),
ADD_TABLE(shc_feature),
ADD_TABLE(shc_feature_comp),
ADD_TABLE(shc_custom_action),
ADD_TABLE(shc2_install_exec_seq),
}

Definition at line 2053 of file install.c.

Referenced by test_shared_component().

◆ shc_component_dat

const char shc_component_dat[]
static
Initial value:
=
"Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"sharedcomponent\t{900A4ACB-DC6F-4795-A04B-81B530183D41}\tMSITESTDIR\t0\t\tsharedcomponent\n"

Definition at line 1219 of file install.c.

◆ shc_custom_action_dat

const char shc_custom_action_dat[]
static
Initial value:
=
"Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"TestComponentAction\t19\t\twrong component action on install\t\n"
"TestDisallowedAction\t19\t\twrong component action on disallowed remove\t\n"
"TestRemoveAction\t19\t\twrong component action on remove\t\n"

Definition at line 1225 of file install.c.

◆ shc_feature_comp_dat

const char shc_feature_comp_dat[]
static
Initial value:
=
"Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"feature\tsharedcomponent\n"

Definition at line 1213 of file install.c.

◆ shc_feature_dat

const char shc_feature_dat[]
static
Initial value:
=
"Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"feature\t\t\t\t1\t2\tMSITESTDIR\t0\n"

Definition at line 1207 of file install.c.

◆ shc_file_dat

const char shc_file_dat[]
static
Initial value:
=
"File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"sharedcomponent\tsharedcomponent\tsharedcomponent.txt\t1000\t\t\t8192\t1\n"

Definition at line 1201 of file install.c.

◆ shc_install_exec_seq_dat

const char shc_install_exec_seq_dat[]
static
Initial value:
=
"Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"LaunchConditions\t\t100\n"
"CostInitialize\t\t200\n"
"FileCost\t\t300\n"
"CostFinalize\t\t600\n"
"TestDisallowedAction\tREMOVE AND ($sharedcomponent <> -1)\t700\n"
"InstallValidate\t\t900\n"
"InstallInitialize\t\t1200\n"
"ProcessComponents\t\t1300\n"
"RemoveFiles\t\t1400\n"
"InstallFiles\t\t1500\n"
"TestComponentAction\tNOT REMOVE AND ($sharedcomponent <> 3)\t1600\n"
"RegisterProduct\t\t1700\n"
"PublishFeatures\t\t1800\n"
"PublishProduct\t\t1900\n"
"UnpublishFeatures\t\t1950\n"
"InstallFinalize\t\t2000\n"

Definition at line 1233 of file install.c.

◆ shc_property_dat

const char shc_property_dat[]
static
Initial value:
=
"Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"INSTALLLEVEL\t3\n"
"ProductCode\t{5CD99CD0-69C7-409B-9905-82DD743CC840}\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.1\n"
"MSIFASTINSTALL\t1\n"

Definition at line 1181 of file install.c.

◆ shc_tables

const msi_table shc_tables[]
static
Initial value:
=
{
ADD_TABLE(shc_file),
ADD_TABLE(shc_component),
ADD_TABLE(shc_feature),
ADD_TABLE(shc_feature_comp),
ADD_TABLE(shc_custom_action),
ADD_TABLE(shc_install_exec_seq),
}

Definition at line 2040 of file install.c.

Referenced by test_shared_component().

◆ shortcut_dat

const CHAR shortcut_dat[]
static
Initial value:
= "Shortcut\tDirectory_\tName\tComponent_\tTarget\tArguments\tDescription\tHotkey\tIcon_\tIconIndex\tShowCmd\tWkDir\n"
"s72\ts72\tl128\ts72\ts72\tS255\tL255\tI2\tS72\tI2\tI2\tS72\n"
"Shortcut\tShortcut\n"
"Shortcut\tMSITESTDIR\tShortcut\tcomponent\tShortcut\t\tShortcut\t\t\t\t\t\n"

Definition at line 241 of file install.c.

◆ size

Definition at line 3757 of file install.c.

◆ sp_component_dat

const CHAR sp_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"augustus\t\tTWODIR\t0\t\taugustus\n"

Definition at line 805 of file install.c.

◆ sp_directory_dat

const CHAR sp_directory_dat[]
static
Initial value:
= "Directory\tDirectory_Parent\tDefaultDir\n"
"s72\tS72\tl255\n"
"Directory\tDirectory\n"
"TARGETDIR\t\tSourceDir\n"
"ProgramFilesFolder\tTARGETDIR\t.\n"
"MSITESTDIR\tProgramFilesFolder\tmsitest:.\n"
"ONEDIR\tMSITESTDIR\t.:shortone|longone\n"
"TWODIR\tONEDIR\t.:shorttwo|longtwo"

Definition at line 810 of file install.c.

◆ sp_tables

const msi_table sp_tables[]
static
Initial value:
=
{
ADD_TABLE(sp_component),
ADD_TABLE(sp_directory),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1816 of file install.c.

Referenced by test_sourcepath().

◆ spmap

const struct sourcepathmap spmap[256]
static

Referenced by test_sourcepath().

◆ sr_custom_action_dat

const CHAR sr_custom_action_dat[]
static
Initial value:
=
"Action\tType\tSource\tTarget\n"
"s72\ti2\tS64\tS0\n"
"CustomAction\tAction\n"
"sourcedir_unset\t19\t\tSourceDir should not be set\n"
"sourcedir_set\t19\t\tSourceDir should be set\n"

Definition at line 1388 of file install.c.

◆ sr_install_exec_seq_dat

const CHAR sr_install_exec_seq_dat[]
static
Initial value:
=
"Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"CostInitialize\t\t200\n"
"FileCost\t\t300\n"
"CostFinalize\t\t400\n"
"InstallValidate\t\t500\n"
"InstallInitialize\t\t600\n"
"sourcedir_unset\tSourceDir\t700\n"
"ResolveSource\tRESOLVE_SOURCE\t800\n"
"ProcessComponents\tPROCESS_COMPONENTS\t800\n"
"InstallFiles\tINSTALL_FILES\t800\n"
"sourcedir_set\tNOT SourceDir\t900\n"
"InstallFinalize\t\t1000\n"

Definition at line 1372 of file install.c.

◆ sr_tables

const msi_table sr_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(sr_install_exec_seq),
ADD_TABLE(sr_custom_action),
}

Definition at line 2105 of file install.c.

Referenced by test_source_resolution().

◆ ss_media_dat

const CHAR ss_media_dat[]
static
Initial value:
= "DiskId\tLastSequence\tDiskPrompt\tCabinet\tVolumeLabel\tSource\n"
"i2\ti4\tL64\tS255\tS32\tS72\n"
"Media\tDiskId\n"
"1\t2\t\ttest1.cab\tDISK1\t\n"
"2\t2\t\ttest2.cab\tDISK2\t\n"
"3\t12\t\ttest3.cab\tDISK3\t\n"

Definition at line 413 of file install.c.

◆ ss_tables

const msi_table ss_tables[]
static
Initial value:
=
{
ADD_TABLE(cc_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(cc_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(ss_media),
}

Definition at line 1625 of file install.c.

Referenced by test_samesequence().

◆ 

const struct { ... } table_transform_data[]
Initial value:
=
{
{ name1, data1, sizeof data1 - 1 },
{ name2, data2, sizeof data2 },
{ name3, data3, sizeof data3 },
}
static const char data1[]
Definition: install.c:3740
static const WCHAR name3[]
Definition: install.c:3737
static const WCHAR name2[]
Definition: install.c:3736
static const WCHAR data2[]
Definition: install.c:3743
static const WCHAR data3[]
Definition: install.c:3750
static const WCHAR name1[]
Definition: install.c:3735
Definition: tftpd.h:126
Definition: tftpd.h:138

Referenced by generate_transform_manual().

◆ tables

const msi_table tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(install_exec_seq),
}
const char ** registry
Definition: cffdrivr.c:690

Definition at line 1423 of file install.c.

Referenced by create_database_wordcount(), test_MsiInstallProduct(), test_MsiSetComponentState(), and test_packagecoltypes().

◆ tp_component_dat

const CHAR tp_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"augustus\t\tMSITESTDIR\t0\tprop=\"val\"\taugustus\n"

Definition at line 572 of file install.c.

◆ tp_tables

const msi_table tp_tables[]
static
Initial value:
=
{
ADD_TABLE(tp_component),
ADD_TABLE(rof_feature),
ADD_TABLE(ci2_feature_comp),
ADD_TABLE(ci2_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(rof_media),
}

Definition at line 1700 of file install.c.

Referenced by test_transformprop().

◆ uc_component_dat

const CHAR uc_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"upgradecode\t{6952B732-2FCB-4E47-976F-989FCBD7EDFB}\tMSITESTDIR\t0\t\tupgradecode.txt\n"

Definition at line 1025 of file install.c.

◆ uc_feature_comp_dat

const CHAR uc_feature_comp_dat[]
static
Initial value:
= "Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"upgradecode\tupgradecode\n"

Definition at line 1020 of file install.c.

◆ uc_feature_dat

const CHAR uc_feature_dat[]
static
Initial value:
= "Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"upgradecode\t\t\tupgradecode feature\t1\t2\tMSITESTDIR\t0\n"

Definition at line 1015 of file install.c.

◆ uc_file_dat

const CHAR uc_file_dat[]
static
Initial value:
= "File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"upgradecode.txt\tupgradecode\tupgradecode.txt\t1000\t\t\t8192\t1\n"

Definition at line 1010 of file install.c.

◆ uc_install_exec_seq_dat

const CHAR uc_install_exec_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"LaunchConditions\t\t100\n"
"CostInitialize\t\t200\n"
"FileCost\t\t300\n"
"CostFinalize\t\t400\n"
"InstallInitialize\t\t500\n"
"ProcessComponents\t\t600\n"
"InstallValidate\t\t700\n"
"RemoveFiles\t\t800\n"
"InstallFiles\t\t900\n"
"RegisterProduct\t\t1000\n"
"PublishFeatures\t\t1100\n"
"PublishProduct\t\t1200\n"
"UnpublishFeatures\t\t1250\n"
"InstallFinalize\t\t1300\n"

Definition at line 1040 of file install.c.

◆ uc_property_dat

const CHAR uc_property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"INSTALLLEVEL\t3\n"
"ProductCode\t{E5FB1241-F547-4BA7-A60E-8E75797268D4}\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.1\n"
"UpgradeCode\t#UPGEADECODE#\n"
"MSIFASTINSTALL\t1\n"

Definition at line 1030 of file install.c.

◆ uc_tables

const msi_table uc_tables[]
static
Initial value:
=
{
ADD_TABLE(uc_component),
ADD_TABLE(uc_feature),
ADD_TABLE(uc_feature_comp),
ADD_TABLE(uc_file),
ADD_TABLE(uc_install_exec_seq),
}

Definition at line 2003 of file install.c.

Referenced by test_upgrade_code().

◆ ui_component_dat

const CHAR ui_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"maximus\t\tMSITESTDIR\t0\tHASUIRUN=1\tmaximus\n"
"augustus\t\tMSITESTDIR\t0\t1\taugustus\n"
"caesar\t\tMSITESTDIR\t0\t1\tcaesar\n"

Definition at line 421 of file install.c.

◆ ui_custom_action_dat

const CHAR ui_custom_action_dat[]
static
Initial value:
= "Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"SetUIProperty\t51\tHASUIRUN\t1\t\n"

Definition at line 434 of file install.c.

◆ ui_install_ui_seq_dat

const CHAR ui_install_ui_seq_dat[]
static
Initial value:
= "Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallUISequence\tAction\n"
"SetUIProperty\t\t5\n"
"ExecuteAction\t\t1100\n"

Definition at line 428 of file install.c.

◆ ui_tables

const msi_table ui_tables[]
static
Initial value:
=
{
ADD_TABLE(ui_component),
ADD_TABLE(cc_feature),
ADD_TABLE(cc_feature_comp),
ADD_TABLE(cc_file),
ADD_TABLE(install_exec_seq),
ADD_TABLE(ui_install_ui_seq),
ADD_TABLE(ui_custom_action),
ADD_TABLE(cc_media),
}

Definition at line 1637 of file install.c.

Referenced by test_uiLevelFlags().

◆ up2_property_dat

const CHAR up2_property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"DefaultUIFont\tDlgFont8\n"
"HASUIRUN\t0\n"
"INSTALLLEVEL\t3\n"
"InstallMode\tTypical\n"
"Manufacturer\tWine\n"
"PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
"ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
"ProductID\tnone\n"
"ProductLanguage\t1033\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.2\n"
"PROMPTROLLBACKCOST\tP\n"
"Setup\tSetup\n"
"UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
"AdminProperties\tPOSTADMIN\n"
"ROOTDRIVE\tC:\\\n"
"MSIFASTINSTALL\t1\n"

Definition at line 273 of file install.c.

◆ up2_tables

const msi_table up2_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(install_exec_seq),
ADD_TABLE(up2_property),
}

Definition at line 1475 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up3_property_dat

const CHAR up3_property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"DefaultUIFont\tDlgFont8\n"
"HASUIRUN\t0\n"
"INSTALLLEVEL\t3\n"
"InstallMode\tTypical\n"
"Manufacturer\tWine\n"
"PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
"ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
"ProductID\tnone\n"
"ProductLanguage\t1033\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.2\n"
"PROMPTROLLBACKCOST\tP\n"
"Setup\tSetup\n"
"UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
"AdminProperties\tPOSTADMIN\n"
"ROOTDRIVE\tC:\\\n"
"RemovePreviousVersions\t1\n"
"MSIFASTINSTALL\t1\n"

Definition at line 294 of file install.c.

◆ up3_tables

const msi_table up3_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(install_exec_seq),
ADD_TABLE(up3_property),
}

Definition at line 1488 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up4_tables

const msi_table up4_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(pp_install_exec_seq),
}

Definition at line 1501 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up5_tables

const msi_table up5_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(pp_install_exec_seq),
ADD_TABLE(up_property),
}

Definition at line 1514 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up6_tables

const msi_table up6_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(pp_install_exec_seq),
ADD_TABLE(up2_property),
}

Definition at line 1527 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up7_tables

const msi_table up7_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(pp_install_exec_seq),
ADD_TABLE(up3_property),
}

Definition at line 1540 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up_property_dat

const CHAR up_property_dat[]
static
Initial value:
= "Property\tValue\n"
"s72\tl0\n"
"Property\tProperty\n"
"DefaultUIFont\tDlgFont8\n"
"HASUIRUN\t0\n"
"INSTALLLEVEL\t3\n"
"InstallMode\tTypical\n"
"Manufacturer\tWine\n"
"PIDTemplate\t12345<###-%%%%%%%>@@@@@\n"
"ProductCode\t{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}\n"
"ProductID\tnone\n"
"ProductLanguage\t1033\n"
"ProductName\tMSITEST\n"
"ProductVersion\t1.1.1\n"
"PROMPTROLLBACKCOST\tP\n"
"Setup\tSetup\n"
"UpgradeCode\t{4C0EAA15-0264-4E5A-8758-609EF142B92D}\n"
"AdminProperties\tPOSTADMIN\n"
"ROOTDRIVE\tC:\\\n"
"RemovePreviousVersions\t1\n"
"MSIFASTINSTALL\t1\n"

Definition at line 251 of file install.c.

◆ up_tables

const msi_table up_tables[]
static
Initial value:
=
{
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(install_exec_seq),
ADD_TABLE(up_property),
}

Definition at line 1462 of file install.c.

Referenced by test_MsiInstallProduct().

◆ vp_component_dat

const char vp_component_dat[]
static
Initial value:
=
"Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"comp\t{24364AE7-5B7F-496C-AF5A-54893639C567}\tMSITESTDIR\t0\t\tvolumeprop\n"

Definition at line 1127 of file install.c.

◆ vp_custom_action_dat

const char vp_custom_action_dat[]
static
Initial value:
=
"Action\tType\tSource\tTarget\tISComments\n"
"s72\ti2\tS64\tS0\tS255\n"
"CustomAction\tAction\n"
"TestPrimaryVolumePath0\t19\t\tPrimaryVolumePath set before CostFinalize\t\n"
"TestPrimaryVolumeSpaceAvailable0\t19\t\tPrimaryVolumeSpaceAvailable set before CostFinalize\t\n"
"TestPrimaryVolumeSpaceRequired0\t19\t\tPrimaryVolumeSpaceRequired set before CostFinalize\t\n"
"TestPrimaryVolumeSpaceRemaining0\t19\t\tPrimaryVolumeSpaceRemaining set before CostFinalize\t\n"
"TestPrimaryVolumePath1\t19\t\tPrimaryVolumePath set before InstallValidate\t\n"
"TestPrimaryVolumeSpaceAvailable1\t19\t\tPrimaryVolumeSpaceAvailable not set before InstallValidate\t\n"
"TestPrimaryVolumeSpaceRequired1\t19\t\tPrimaryVolumeSpaceRequired not set before InstallValidate\t\n"
"TestPrimaryVolumeSpaceRemaining1\t19\t\tPrimaryVolumeSpaceRemaining not set before InstallValidate\t\n"
"TestPrimaryVolumePath2\t19\t\tPrimaryVolumePath not set after InstallValidate\t\n"
"TestPrimaryVolumeSpaceAvailable2\t19\t\tPrimaryVolumeSpaceAvailable not set after InstallValidate\t\n"
"TestPrimaryVolumeSpaceRequired2\t19\t\tPrimaryVolumeSpaceRequired not set after InstallValidate\t\n"
"TestPrimaryVolumeSpaceRemaining2\t19\t\tPrimaryVolumeSpaceRemaining not set after InstallValidate\t\n"

Definition at line 1133 of file install.c.

◆ vp_feature_comp_dat

const char vp_feature_comp_dat[]
static
Initial value:
=
"Feature_\tComponent_\n"
"s38\ts72\n"
"FeatureComponents\tFeature_\tComponent_\n"
"feature\tcomp\n"

Definition at line 1121 of file install.c.

◆ vp_feature_dat

const char vp_feature_dat[]
static
Initial value:
=
"Feature\tFeature_Parent\tTitle\tDescription\tDisplay\tLevel\tDirectory_\tAttributes\n"
"s38\tS38\tL64\tL255\tI2\ti2\tS72\ti2\n"
"Feature\tFeature\n"
"feature\t\t\t\t1\t2\tMSITESTDIR\t0\n"

Definition at line 1115 of file install.c.

◆ vp_file_dat

const char vp_file_dat[]
static
Initial value:
=
"File\tComponent_\tFileName\tFileSize\tVersion\tLanguage\tAttributes\tSequence\n"
"s72\ts72\tl255\ti4\tS72\tS20\tI2\ti2\n"
"File\tFile\n"
"volumeprop\tcomp\tvolumeprop.txt\t1000\t\t\t8192\t1\n"

Definition at line 1109 of file install.c.

◆ vp_install_exec_seq_dat

const char vp_install_exec_seq_dat[]
static
Initial value:
=
"Action\tCondition\tSequence\n"
"s72\tS255\tI2\n"
"InstallExecuteSequence\tAction\n"
"LaunchConditions\t\t100\n"
"CostInitialize\t\t200\n"
"FileCost\t\t300\n"
"TestPrimaryVolumePath0\tPrimaryVolumePath AND NOT REMOVE\t400\n"
"TestPrimaryVolumeSpaceAvailable0\tPrimaryVolumeSpaceAvailable AND NOT REMOVE\t500\n"
"TestPrimaryVolumeSpaceRequired0\tPrimaryVolumeSpaceRequired AND NOT REMOVE\t510\n"
"TestPrimaryVolumeSpaceRemaining0\tPrimaryVolumeSpaceRemaining AND NOT REMOVE\t520\n"
"CostFinalize\t\t600\n"
"TestPrimaryVolumePath1\tPrimaryVolumePath AND NOT REMOVE\t600\n"
"TestPrimaryVolumeSpaceAvailable1\tNOT PrimaryVolumeSpaceAvailable AND NOT REMOVE\t800\n"
"TestPrimaryVolumeSpaceRequired1\tNOT PrimaryVolumeSpaceRequired AND NOT REMOVE\t810\n"
"TestPrimaryVolumeSpaceRemaining1\tNOT PrimaryVolumeSpaceRemaining AND NOT REMOVE\t820\n"
"InstallValidate\t\t900\n"
"TestPrimaryVolumePath2\tNOT PrimaryVolumePath AND NOT REMOVE\t1000\n"
"TestPrimaryVolumeSpaceAvailable2\tNOT PrimaryVolumeSpaceAvailable AND NOT REMOVE\t1100\n"
"TestPrimaryVolumeSpaceRequired2\tNOT PrimaryVolumeSpaceRequired AND NOT REMOVE\t1110\n"
"TestPrimaryVolumeSpaceRemaining2\tNOT PrimaryVolumeSpaceRemaining AND NOT REMOVE\t1120\n"
"InstallInitialize\t\t1200\n"
"ProcessComponents\t\t1300\n"
"RemoveFiles\t\t1400\n"
"InstallFiles\t\t1500\n"
"RegisterProduct\t\t1600\n"
"PublishFeatures\t\t1700\n"
"PublishProduct\t\t1800\n"
"UnpublishFeatures\t\t1850\n"
"InstallFinalize\t\t1900\n"

Definition at line 1150 of file install.c.

◆ vp_tables

const msi_table vp_tables[]
static
Initial value:
=
{
ADD_TABLE(vp_file),
ADD_TABLE(vp_component),
ADD_TABLE(vp_feature),
ADD_TABLE(vp_feature_comp),
ADD_TABLE(vp_custom_action),
ADD_TABLE(vp_install_exec_seq),
}

Definition at line 2027 of file install.c.

Referenced by test_volume_props().

◆ WINDOWS_DIR

char WINDOWS_DIR[MAX_PATH]

Definition at line 70 of file install.c.

Referenced by get_system_dirs(), and test_icon_table().

◆ wrv_component_dat

const CHAR wrv_component_dat[]
static
Initial value:
= "Component\tComponentId\tDirectory_\tAttributes\tCondition\tKeyPath\n"
"s72\tS38\ts72\ti2\tS255\tS72\n"
"Component\tComponent\n"
"augustus\t\tMSITESTDIR\t0\t\taugustus\n"

Definition at line 660 of file install.c.

◆ x64_directory_dat

const CHAR x64_directory_dat[]
static
Initial value:
=
"Directory\tDirectory_Parent\tDefaultDir\n"
"s72\tS72\tl255\n"
"Directory\tDirectory\n"
"CABOUTDIR\tMSITESTDIR\tcabout\n"
"CHANGEDDIR\tMSITESTDIR\tchanged:second\n"
"FIRSTDIR\tMSITESTDIR\tfirst\n"
"MSITESTDIR\tProgramFiles64Folder\tmsitest\n"
"NEWDIR\tCABOUTDIR\tnew\n"
"ProgramFiles64Folder\tTARGETDIR\t.\n"
"TARGETDIR\t\tSourceDir"

Definition at line 1360 of file install.c.

◆ x64_tables

const msi_table x64_tables[]
static
Initial value:
=
{
ADD_TABLE(x64_directory),
ADD_TABLE(component),
ADD_TABLE(feature_comp),
ADD_TABLE(install_exec_seq),
}

Definition at line 2093 of file install.c.

Referenced by test_wow64().