ReactOS 0.4.17-dev-970-gcf0f1a6
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 <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 create_pf(file, is_file)   create_pf_data(file, file, is_file)
 

Functions

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)
 
BOOL is_process_elevated (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 char * load_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 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 BOOL is_wow64
 
static const BOOL is_64bit = sizeof(void *) > sizeof(int)
 
static const char * msifile = "msitest.msi"
 
static const char * msifile2 = "winetest2.msi"
 
static const char * mstfile = "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 char * customdll
 
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 3965 of file install.c.

◆ FOLDER_THRESHOLD

#define FOLDER_THRESHOLD   900000

Definition at line 2106 of file install.c.

◆ MEDIA_SIZE

#define MEDIA_SIZE   0x7FFFFFFF

Definition at line 2105 of file install.c.

Function Documentation

◆ add_custom_dll()

static void add_custom_dll ( MSIHANDLE  hdb)
static

Definition at line 2610 of file install.c.

2611{
2613 UINT res;
2614
2615 if (!customdll)
2616 customdll = load_resource("custom.dll");
2617
2619
2620 res = run_query(hdb, 0, "CREATE TABLE `Binary` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NULL PRIMARY KEY `Name`)");
2621 ok(res == ERROR_SUCCESS, "failed to create Binary table: %u\n", res);
2622
2625 ok(res == ERROR_SUCCESS, "failed to add %s to stream: %u\n", customdll, res);
2626
2627 res = run_query(hdb, record, "INSERT INTO `Binary` (`Name`, `Data`) VALUES ('custom.dll', ?)");
2628 ok(res == ERROR_SUCCESS, "failed to insert into Binary table: %u\n", res);
2629
2631}
#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:4149
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
unsigned int UINT
Definition: sysinfo.c:13
#define load_resource(a, b, c)
Definition: font.c:46
UINT run_query(MSIHANDLE hdb, MSIHANDLE hrec, const char *query)
Definition: install.c:3559
static const char * customdll
Definition: install.c:56
static INT CALLBACK ok_callback(void *context, UINT message_type, MSIHANDLE record)
Definition: install.c:2589
@ INSTALLLOGMODE_USER
Definition: msi.h:134
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 2279 of file install.c.

2280{
2281 char path[MAX_PATH];
2282 char filename[MAX_PATH];
2283
2285 lstrcatA(path, "\\");
2286 lstrcatA(path, file);
2287
2289
2292}
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:1389
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 BOOL CDECL get_next_cabinet(PCCAB pccab, ULONG cbPrevCab, void *pv)
Definition: install.c:2120
static INT_PTR CDECL get_open_info(char *pszName, USHORT *pdate, USHORT *ptime, USHORT *pattribs, int *err, void *pv)
Definition: install.c:2253
char CURR_DIR[MAX_PATH]
Definition: install.c:49
int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)
Definition: compress.c:68
Definition: fci.c:123

Referenced by create_cab_file(), and create_cc_test_files().

◆ check_file_matches()

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

Definition at line 6175 of file install.c.

6176{
6177 char buffer[200];
6178 HANDLE file;
6179 DWORD size;
6180
6182 ReadFile(file, buffer, sizeof(buffer), &size, NULL);
6183 ok(size == strlen(text) && !memcmp(buffer, text, size), "got %.*s\n", (int)size, buffer);
6185}
#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:1826
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
Definition: string.c:2807
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1597
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint buffer
Definition: glext.h:5915
GLsizeiptr size
Definition: glext.h:5919

Referenced by test_deferred_action().

◆ check_record()

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

Definition at line 2224 of file install.c.

2225{
2226 CHAR buffer[0x20];
2227 UINT r;
2228 DWORD sz;
2229
2230 sz = sizeof buffer;
2231 r = MsiRecordGetStringA(rec, field, buffer, &sz);
2232 return (r == ERROR_SUCCESS ) && !strcmp(val, buffer);
2233}
UINT WINAPI MsiRecordGetStringA(MSIHANDLE handle, UINT iField, char *szValue, DWORD *pcchValue)
Definition: record.c:403
_ACRTIMP int __cdecl strcmp(const char *, const char *)
Definition: string.c:3324
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLuint GLfloat * val
Definition: glext.h:7180
char CHAR
Definition: pedump.c:57
Definition: parser.c:44

◆ compare_pf_data()

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

Definition at line 2475 of file install.c.

2476{
2477 DWORD read;
2478 HANDLE handle;
2479 BOOL ret = FALSE;
2480 char *buffer, path[MAX_PATH];
2481
2483 lstrcatA(path, "\\");
2485
2487 if ((buffer = malloc(size)))
2488 {
2490 if (read == size && !memcmp(data, buffer, size)) ret = TRUE;
2491 free(buffer);
2492 }
2494 return ret;
2495}
#define read
Definition: acwin.h:97
#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
return ret
Definition: mutex.c:147
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:50

Referenced by test_missingcab().

◆ create_cab_file()

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

Definition at line 2307 of file install.c.

2308{
2309 CCAB cabParams;
2310 LPCSTR ptr;
2311 HFCI hfci;
2312 ERF erf;
2313 BOOL res;
2314
2315 set_cab_parameters(&cabParams, name, max_size);
2316
2319 get_temp_file, &cabParams, NULL);
2320
2321 ok(hfci != NULL, "Failed to create an FCI context\n");
2322
2323 ptr = files;
2324 while (*ptr)
2325 {
2326 res = add_file(hfci, ptr, tcompTYPE_MSZIP);
2327 ok(res, "Failed to add file: %s\n", ptr);
2328 ptr += lstrlenA(ptr) + 1;
2329 }
2330
2332 ok(res, "Failed to flush the cabinet\n");
2333
2334 res = FCIDestroy(hfci);
2335 ok(res, "Failed to destroy the cabinet\n");
2336}
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
_ACRTIMP double __cdecl erf(double)
BOOL __cdecl FCIDestroy(HFCI hfci)
Definition: fci.c:1699
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:990
BOOL __cdecl FCIFlushCabinet(HFCI hfci, BOOL fGetNextCab, PFNFCIGETNEXTCABINET pfnfcignc, PFNFCISTATUS pfnfcis)
Definition: fci.c:1665
#define tcompTYPE_MSZIP
Definition: fci.h:65
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
static PVOID ptr
Definition: dispmode.c:27
static void set_cab_parameters(PCCAB pCabParams, const CHAR *name, DWORD max_size)
Definition: install.c:2294
static UINT CDECL fci_write(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
Definition: install.c:2172
static BOOL CDECL get_temp_file(char *pszTempName, int cbTempName, void *pv)
Definition: install.c:2235
static UINT CDECL fci_read(INT_PTR hf, void *memory, UINT cb, int *err, void *pv)
Definition: install.c:2160
static INT_PTR CDECL fci_open(char *pszFile, int oflag, int pmode, int *err, void *pv)
Definition: install.c:2137
static BOOL add_file(HFCI hfci, const char *file, TCOMP compress)
Definition: install.c:2279
static int CDECL fci_delete(char *pszFile, int *err, void *pv)
Definition: install.c:2203
static int CDECL file_placed(PCCAB pccab, char *pszFile, LONG cbFile, BOOL fContinuation, void *pv)
Definition: install.c:2131
static LONG CDECL fci_seek(INT_PTR hf, LONG dist, int seektype, int *err, void *pv)
Definition: install.c:2192
static int CDECL fci_close(INT_PTR hf, int *err, void *pv)
Definition: install.c:2184
Definition: fci.h:144
Definition: fci.h:44
Definition: name.c:39
const char * LPCSTR
Definition: typedefs.h:52

◆ create_cc_test_files()

static void create_cc_test_files ( void  )
static

Definition at line 2960 of file install.c.

2961{
2962 CCAB cabParams;
2963 HFCI hfci;
2964 ERF erf;
2965 static CHAR cab_context[] = "test%d.cab";
2966 BOOL res;
2967
2968 create_file("maximus", 500);
2969 create_file("augustus", 50000);
2970 create_file("tiberius", 500);
2971 create_file("caesar", 500);
2972
2973 set_cab_parameters(&cabParams, "test1.cab", 40000);
2974
2977 get_temp_file, &cabParams, cab_context);
2978 ok(hfci != NULL, "Failed to create an FCI context\n");
2979
2980 res = add_file(hfci, "maximus", tcompTYPE_NONE);
2981 ok(res, "Failed to add file maximus\n");
2982
2983 res = add_file(hfci, "augustus", tcompTYPE_NONE);
2984 ok(res, "Failed to add file augustus\n");
2985
2986 res = add_file(hfci, "tiberius", tcompTYPE_NONE);
2987 ok(res, "Failed to add file tiberius\n");
2988
2990 ok(res, "Failed to flush the cabinet\n");
2991
2992 res = FCIDestroy(hfci);
2993 ok(res, "Failed to destroy the cabinet\n");
2994
2995 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
2996
2997 DeleteFileA("maximus");
2998 DeleteFileA("augustus");
2999 DeleteFileA("tiberius");
3000 DeleteFileA("caesar");
3001}
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:811
#define MEDIA_SIZE
Definition: install.c:2105

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 2633 of file install.c.

2635{
2636 MSIHANDLE db;
2637 UINT r;
2638 WCHAR *nameW;
2639 int j, len;
2640
2641 len = MultiByteToWideChar( CP_ACP, 0, name, -1, NULL, 0 );
2642 if (!(nameW = malloc( len * sizeof(WCHAR) ))) return;
2644
2646 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2647
2648 /* import the tables into the database */
2649 for (j = 0; j < num_tables; j++)
2650 {
2651 const msi_table *table = &tables[j];
2652
2653 write_file(table->filename, table->data, (table->size - 1) * sizeof(char));
2654
2655 r = MsiDatabaseImportA(db, CURR_DIR, table->filename);
2656 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2657
2658 DeleteFileA(table->filename);
2659 }
2660
2661 write_msi_summary_info(db, version, wordcount, template, packagecode);
2662 add_custom_dll(db);
2663
2664 r = MsiDatabaseCommit(db);
2665 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2666
2667 MsiCloseHandle(db);
2668 free( nameW );
2669}
static const WCHAR nameW[]
Definition: main.c:49
#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:863
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:1407
static void write_msi_summary_info(MSIHANDLE db, INT version, INT wordcount, const char *template, const char *packagecode)
Definition: install.c:2535
static void write_file(const CHAR *filename, const char *data, int data_size)
Definition: install.c:2525
static void add_custom_dll(MSIHANDLE hdb)
Definition: install.c:2610
UINT WINAPI MsiDatabaseCommit(MSIHANDLE hdb)
Definition: msiquery.c:958
#define MSIDBOPEN_CREATE
Definition: msiquery.h:69
short WCHAR
Definition: pedump.c:58
BYTE * data

Referenced by test_adminimage(), and test_shared_component().

◆ create_file_data()

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

Definition at line 2394 of file install.c.

2395{
2396 HANDLE file;
2397 DWORD written;
2398
2401 return;
2402
2403 WriteFile(file, data, strlen(data), &written, NULL);
2404
2405 if (size)
2406 {
2409 }
2410
2412}
#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:989
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
Definition: rw.c:25
#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 3951 of file install.c.

3952{
3954
3956 lstrcatA(path, "\\");
3957 lstrcatA(path, file);
3958
3959 if (is_file)
3960 create_file_data(path, data, 500);
3961 else
3963}
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:2394

Referenced by test_missingcab().

◆ create_test_files()

static void create_test_files ( void  )
static

Definition at line 2414 of file install.c.

2415{
2416 CreateDirectoryA("msitest", NULL);
2417 create_file("msitest\\one.txt", 100);
2418 CreateDirectoryA("msitest\\first", NULL);
2419 create_file("msitest\\first\\two.txt", 100);
2420 CreateDirectoryA("msitest\\second", NULL);
2421 create_file("msitest\\second\\three.txt", 100);
2422
2423 create_file("four.txt", 100);
2424 create_file("five.txt", 100);
2425 create_cab_file("msitest.cab", MEDIA_SIZE, "four.txt\0five.txt\0");
2426
2427 create_file("msitest\\filename", 100);
2428
2429 DeleteFileA("four.txt");
2430 DeleteFileA("five.txt");
2431}

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 3003 of file install.c.

3004{
3005 SHFILEOPSTRUCTA shfl;
3006 CHAR path[MAX_PATH+10];
3007
3009 lstrcatA(path, "\\*.cab");
3010 path[strlen(path) + 1] = '\0';
3011
3012 shfl.hwnd = NULL;
3013 shfl.wFunc = FO_DELETE;
3014 shfl.pFrom = path;
3015 shfl.pTo = NULL;
3017
3018 SHFileOperationA(&shfl);
3019}
#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:1160
FILEOP_FLAGS fFlags
Definition: shellapi.h:361

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 2461 of file install.c.

2462{
2464
2466 lstrcatA(path, "\\");
2467 lstrcatA(path, rel_path);
2468
2469 if (is_file)
2470 return DeleteFileA(path);
2471 else
2472 return RemoveDirectoryA(path);
2473}
BOOL WINAPI RemoveDirectoryA(IN LPCSTR lpPathName)
Definition: dir.c:682
char COMMON_FILES_DIR[MAX_PATH]
Definition: install.c:52

Referenced by test_setdirproperty().

◆ delete_pf()

BOOL delete_pf ( const CHAR *  rel_path,
BOOL  is_file 
)

Definition at line 2433 of file install.c.

2434{
2436
2438 lstrcatA(path, "\\");
2439 lstrcatA(path, rel_path);
2440
2441 if (is_file)
2442 return DeleteFileA(path);
2443 else
2444 return RemoveDirectoryA(path);
2445}

Referenced by delete_pf_files(), test_admin(), test_adminimage(), test_adminprops(), test_cabisextracted(), test_caborder(), test_concurrentinstall(), test_continuouscabs(), test_create_remove_shortcut(), test_currentworkingdir(), test_customaction51(), test_delete_services(), test_duplicate_files(), test_feature_override(), test_file_in_use(), test_file_in_use_cab(), test_find_related_products(), test_ini_values(), test_install_remove_odbc(), test_install_services(), test_Installer_InstallProduct(), test_installstate(), test_missingcab(), test_missingcomponent(), test_mixedmedia(), test_move_files(), test_MsiConfigureProductEx(), test_package_validation(), test_preselected(), test_process_components(), test_propcase(), test_publish_components(), test_publish_features(), test_publish_product(), test_readonlyfile(), test_readonlyfile_cab(), test_register_class_info(), test_register_extension_info(), test_register_font(), test_register_mime_info(), test_register_product(), test_register_progid_info(), test_register_typelib(), test_register_user(), test_remove_duplicate_files(), test_remove_existing_products(), test_remove_files(), test_samesequence(), test_self_registration(), test_setpropertyfolder(), test_shortcut(), test_simple_patch(), test_sourcedir_props(), test_sourcedirprop(), test_sourcefolder(), test_sourcepath(), test_start_stop_services(), test_transformprop(), test_uiLevelFlags(), test_upgrade_code(), test_validate_product_id(), and test_wow64().

◆ delete_pf_files()

static void delete_pf_files ( void  )
static

Definition at line 2510 of file install.c.

2511{
2512 ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
2513 ok(delete_pf("msitest\\cabout\\new", FALSE), "Directory not created\n");
2514 ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
2515 ok(delete_pf("msitest\\cabout", FALSE), "Directory not created\n");
2516 ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
2517 ok(delete_pf("msitest\\changed", FALSE), "Directory not created\n");
2518 ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
2519 ok(delete_pf("msitest\\first", FALSE), "Directory not created\n");
2520 ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
2521 ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
2522 ok(delete_pf("msitest", FALSE), "Directory not created\n");
2523}
BOOL delete_pf(const CHAR *rel_path, BOOL is_file)
Definition: install.c:2433

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 2447 of file install.c.

2448{
2450
2452 lstrcatA(path, "\\");
2453 lstrcatA(path, rel_path);
2454
2455 if (is_file)
2456 return DeleteFileA(path);
2457 else
2458 return RemoveDirectoryA(path);
2459}
char PROG_FILES_DIR_NATIVE[MAX_PATH]
Definition: install.c:51

Referenced by test_wow64().

◆ delete_pfmsitest_files()

static void delete_pfmsitest_files ( void  )
static

Definition at line 3537 of file install.c.

3538{
3539 SHFILEOPSTRUCTA shfl;
3540 CHAR path[MAX_PATH+11];
3541
3543 lstrcatA(path, "\\msitest\\*");
3544 path[strlen(path) + 1] = '\0';
3545
3546 shfl.hwnd = NULL;
3547 shfl.wFunc = FO_DELETE;
3548 shfl.pFrom = path;
3549 shfl.pTo = NULL;
3551
3552 SHFileOperationA(&shfl);
3553
3555 lstrcatA(path, "\\msitest");
3557}
#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 2497 of file install.c.

2498{
2499 DeleteFileA("msitest.msi");
2500 DeleteFileA("msitest.cab");
2501 DeleteFileA("msitest\\second\\three.txt");
2502 DeleteFileA("msitest\\first\\two.txt");
2503 DeleteFileA("msitest\\one.txt");
2504 DeleteFileA("msitest\\filename");
2505 RemoveDirectoryA("msitest\\second");
2506 RemoveDirectoryA("msitest\\first");
2507 RemoveDirectoryA("msitest");
2508}

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 2184 of file install.c.

2185{
2186 HANDLE handle = (HANDLE)hf;
2187 ok(CloseHandle(handle), "Failed to CloseHandle\n");
2188
2189 return 0;
2190}
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 2203 of file install.c.

2204{
2205 BOOL ret = DeleteFileA(pszFile);
2206 ok(ret, "Failed to DeleteFile %s\n", pszFile);
2207
2208 return 0;
2209}

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 2137 of file install.c.

2138{
2139 HANDLE handle;
2140 DWORD dwAccess = 0;
2141 DWORD dwShareMode = 0;
2142 DWORD dwCreateDisposition = OPEN_EXISTING;
2143
2144 dwAccess = GENERIC_READ | GENERIC_WRITE;
2146
2148 dwCreateDisposition = OPEN_EXISTING;
2149 else
2150 dwCreateDisposition = CREATE_NEW;
2151
2152 handle = CreateFileA(pszFile, dwAccess, dwShareMode, NULL,
2153 dwCreateDisposition, 0, NULL);
2154
2155 ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszFile);
2156
2157 return (INT_PTR)handle;
2158}
#define FILE_SHARE_READ
Definition: compat.h:136
DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName)
Definition: fileinfo.c:620
#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 2160 of file install.c.

2161{
2162 HANDLE handle = (HANDLE)hf;
2163 DWORD dwRead;
2164 BOOL res;
2165
2166 res = ReadFile(handle, memory, cb, &dwRead, NULL);
2167 ok(res, "Failed to ReadFile\n");
2168
2169 return dwRead;
2170}
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
static char memory[1024 *256]
Definition: process.c:122

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 2192 of file install.c.

2193{
2194 HANDLE handle = (HANDLE)hf;
2195 DWORD ret;
2196
2197 ret = SetFilePointer(handle, dist, NULL, seektype);
2198 ok(ret != INVALID_SET_FILE_POINTER, "Failed to SetFilePointer\n");
2199
2200 return ret;
2201}
#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 2172 of file install.c.

2173{
2174 HANDLE handle = (HANDLE)hf;
2175 DWORD dwWritten;
2176 BOOL res;
2177
2178 res = WriteFile(handle, memory, cb, &dwWritten, NULL);
2179 ok(res, "Failed to WriteFile\n");
2180
2181 return dwWritten;
2182}

Referenced by create_cab_file(), and create_cc_test_files().

◆ file_exists()

BOOL file_exists ( const char *  file)

Definition at line 3521 of file install.c.

3522{
3524}

Referenced by pf_exists(), and test_icon_table().

◆ file_matches()

static BOOL file_matches ( LPSTR  path)
static

Definition at line 3316 of file install.c.

3317{
3318 CHAR buf[MAX_PATH];
3319 HANDLE file;
3320 DWORD size;
3321
3323 NULL, OPEN_EXISTING, 0, NULL);
3325 ReadFile(file, buf, 15, &size, NULL);
3327
3328 return !lstrcmpA(buf, "msitest\\maximus");
3329}
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
Definition: locale.c:4104
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define ZeroMemory
Definition: minwinbase.h:31

Referenced by test_readonlyfile().

◆ file_matches_data()

static BOOL file_matches_data ( LPCSTR  file,
LPCSTR  data 
)
static

Definition at line 5225 of file install.c.

5226{
5227 DWORD len, data_len = strlen(data);
5228 HANDLE handle;
5229 char buf[128];
5230
5232 ok(handle != INVALID_HANDLE_VALUE, "failed to open %s (%lu)\n", file, GetLastError());
5233
5234 if (ReadFile(handle, buf, sizeof(buf), &len, NULL) && len >= data_len)
5235 {
5237 return !memcmp(buf, data, data_len);
5238 }
5240 return FALSE;
5241}
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 2131 of file install.c.

2133{
2134 return 0;
2135}

Referenced by create_cab_file(), and create_cc_test_files().

◆ generate_transform()

static void generate_transform ( void  )
static

Definition at line 3603 of file install.c.

3604{
3605 MSIHANDLE hdb1, hdb2;
3606 LPCSTR query;
3607 UINT r;
3608
3609 /* start with two identical databases */
3611
3613 ok(r == ERROR_SUCCESS , "Failed to create database\n");
3614
3615 r = MsiDatabaseCommit(hdb1);
3616 ok(r == ERROR_SUCCESS , "Failed to commit database\n");
3617
3619 ok(r == ERROR_SUCCESS , "Failed to create database\n");
3620
3621 query = "INSERT INTO `Property` ( `Property`, `Value` ) VALUES ( 'prop', 'val' )";
3622 r = run_query(hdb1, 0, query);
3623 ok(r == ERROR_SUCCESS, "failed to add property\n");
3624
3625 /* database needs to be committed */
3626 MsiDatabaseCommit(hdb1);
3627
3628 r = MsiDatabaseGenerateTransformA(hdb1, hdb2, mstfile, 0, 0);
3629 ok(r == ERROR_SUCCESS, "return code %d, should be ERROR_SUCCESS\n", r);
3630
3631 r = MsiCreateTransformSummaryInfoA(hdb2, hdb2, mstfile, 0, 0);
3632 todo_wine ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
3633
3634 MsiCloseHandle(hdb1);
3635 MsiCloseHandle(hdb2);
3636}
BOOL WINAPI CopyFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName, IN BOOL bFailIfExists)
Definition: copyansi.c:58
UINT WINAPI MsiCreateTransformSummaryInfoA(MSIHANDLE db, MSIHANDLE db_ref, const char *transform, int error, int validation)
Definition: suminfo.c:1243
#define todo_wine
Definition: minitest.h:80
static const WCHAR msifile2W[]
Definition: install.c:47
static const WCHAR msifileW[]
Definition: install.c:46
static const char * msifile2
Definition: install.c:43
static const char * msifile
Definition: install.c:42
static const char * mstfile
Definition: install.c:44
UINT WINAPI MsiDatabaseGenerateTransformA(MSIHANDLE hdb, MSIHANDLE hdbref, const char *szTransformFile, int iReserved1, int iReserved2)
Definition: msiquery.c:944
#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 3671 of file install.c.

3672{
3673 IStorage *stg = NULL;
3674 IStream *stm;
3675 WCHAR name[0x20];
3676 HRESULT r;
3677 DWORD i, count;
3679
3680 const CLSID CLSID_MsiTransform = { 0xc1082,0,0,{0xc0,0,0,0,0,0,0,0x46}};
3681
3682 MultiByteToWideChar(CP_ACP, 0, mstfile, -1, name, 0x20);
3683
3684 r = StgCreateDocfile(name, mode, 0, &stg);
3685 ok(r == S_OK, "failed to create storage\n");
3686 if (!stg)
3687 return;
3688
3689 r = IStorage_SetClass(stg, &CLSID_MsiTransform);
3690 ok(r == S_OK, "failed to set storage type\n");
3691
3692 for (i=0; i<ARRAY_SIZE(table_transform_data); i++)
3693 {
3694 r = IStorage_CreateStream(stg, table_transform_data[i].name,
3695 STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm);
3696 if (FAILED(r))
3697 {
3698 ok(0, "failed to create stream %#lx\n", r);
3699 continue;
3700 }
3701
3702 r = IStream_Write(stm, table_transform_data[i].data,
3705 ok(0, "failed to write stream\n");
3706 IStream_Release(stm);
3707 }
3708
3709 IStorage_Release(stg);
3710
3712}
#define ARRAY_SIZE(A)
Definition: main.h:20
HRESULT WINAPI StgCreateDocfile(LPCOLESTR pwcsName, DWORD grfMode, DWORD reserved, IStorage **ppstgOpen)
Definition: storage32.c:8597
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 @1951 table_transform_data[]
static void set_transform_summary_info(void)
Definition: install.c:3575
#define STGM_CREATE
Definition: objbase.h:945
#define STGM_DIRECT
Definition: objbase.h:933
#define STGM_READWRITE
Definition: objbase.h:938
#define STGM_SHARE_EXCLUSIVE
Definition: objbase.h:942
#define STGM_WRITE
Definition: objbase.h:937

Referenced by test_transformprop().

◆ get_next_cabinet()

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

Definition at line 2120 of file install.c.

2121{
2122 sprintf(pccab->szCab, pv, pccab->iCab);
2123 return TRUE;
2124}
#define sprintf
Definition: sprintf.c:45
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 2253 of file install.c.

2255{
2257 FILETIME filetime;
2258 HANDLE handle;
2259 DWORD attrs;
2260 BOOL res;
2261
2264
2265 ok(handle != INVALID_HANDLE_VALUE, "Failed to CreateFile %s\n", pszName);
2266
2268 ok(res, "Expected GetFileInformationByHandle to succeed\n");
2269
2270 FileTimeToLocalFileTime(&finfo.ftLastWriteTime, &filetime);
2271 FileTimeToDosDateTime(&filetime, pdate, ptime);
2272
2273 attrs = GetFileAttributesA(pszName);
2274 ok(attrs != INVALID_FILE_ATTRIBUTES, "Failed to GetFileAttributes\n");
2275
2276 return (INT_PTR)handle;
2277}
BOOL WINAPI GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
Definition: fileinfo.c:442
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:216
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 4559 of file install.c.

4560{
4562 HANDLE hfile;
4563 DWORD size;
4564
4566 lstrcatA(path, "\\");
4567 lstrcatA(path, file);
4568
4570 if (hfile == INVALID_HANDLE_VALUE)
4571 return INVALID_FILE_SIZE;
4572
4573 size = GetFileSize(hfile, NULL);
4574 CloseHandle(hfile);
4575 return size;
4576}
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
Definition: fileinfo.c:331
#define INVALID_FILE_SIZE
Definition: winbase.h:528

Referenced by test_sourcepath().

◆ get_system_dirs()

BOOL get_system_dirs ( void  )

Definition at line 2357 of file install.c.

2358{
2359 HKEY hkey;
2360 DWORD type, size;
2361
2362 if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion",
2363 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hkey))
2364 return FALSE;
2365
2366 size = MAX_PATH;
2367 if (RegQueryValueExA(hkey, "ProgramFilesDir (x86)", 0, &type, (LPBYTE)PROG_FILES_DIR, &size) &&
2368 RegQueryValueExA(hkey, "ProgramFilesDir", 0, &type, (LPBYTE)PROG_FILES_DIR, &size)) {
2369 RegCloseKey(hkey);
2370 return FALSE;
2371 }
2372
2373 size = MAX_PATH;
2374 if (RegQueryValueExA(hkey, "CommonFilesDir (x86)", 0, &type, (LPBYTE)COMMON_FILES_DIR, &size) &&
2375 RegQueryValueExA(hkey, "CommonFilesDir", 0, &type, (LPBYTE)COMMON_FILES_DIR, &size)) {
2376 RegCloseKey(hkey);
2377 return FALSE;
2378 }
2379
2380 size = MAX_PATH;
2381 if (RegQueryValueExA(hkey, "ProgramFilesDir", 0, &type, (LPBYTE)PROG_FILES_DIR_NATIVE, &size)) {
2382 RegCloseKey(hkey);
2383 return FALSE;
2384 }
2385
2386 RegCloseKey(hkey);
2387
2389 return FALSE;
2390
2391 return TRUE;
2392}
#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:2355
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
char WINDOWS_DIR[MAX_PATH]
Definition: install.c:54
#define KEY_QUERY_VALUE
Definition: nt_native.h:1019
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 2235 of file install.c.

2236{
2237 LPSTR tempname;
2238
2239 tempname = malloc(MAX_PATH);
2240 GetTempFileNameA(".", "xx", 0, tempname);
2241
2242 if (tempname && (strlen(tempname) < (unsigned)cbTempName))
2243 {
2244 lstrcpyA(pszTempName, tempname);
2245 free(tempname);
2246 return TRUE;
2247 }
2248
2249 free(tempname);
2250 return FALSE;
2251}
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
Definition: filename.c:26
char * LPSTR
Definition: typedefs.h:51

Referenced by create_cab_file(), and create_cc_test_files().

◆ get_user_dirs()

BOOL get_user_dirs ( void  )

Definition at line 2338 of file install.c.

2339{
2340 HKEY hkey;
2341 DWORD type, size;
2342
2344 "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", &hkey))
2345 return FALSE;
2346
2347 size = MAX_PATH;
2348 if(RegQueryValueExA(hkey, "AppData", 0, &type, (LPBYTE)APP_DATA_DIR, &size)){
2349 RegCloseKey(hkey);
2350 return FALSE;
2351 }
2352
2353 RegCloseKey(hkey);
2354 return TRUE;
2355}
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3234
char APP_DATA_DIR[MAX_PATH]
Definition: install.c:53
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by START_TEST().

◆ is_process_elevated()

BOOL is_process_elevated ( void  )

Definition at line 2211 of file install.c.

2212{
2213 HANDLE token;
2215 DWORD size;
2216 BOOL ret;
2217
2221 return (ret && type == TokenElevationTypeFull);
2222}
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
#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
enum _TOKEN_ELEVATION_TYPE TOKEN_ELEVATION_TYPE
@ TokenElevationTypeDefault
Definition: winnt_old.h:2717
@ TokenElevationTypeFull
Definition: winnt_old.h:2718
#define TOKEN_QUERY
Definition: setypes.h:940
@ TokenElevationType
Definition: setypes.h:995

Referenced by START_TEST(), 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 2566 of file install.c.

2567{
2568 static char path[MAX_PATH];
2569 DWORD written;
2570 HANDLE file;
2571 HRSRC res;
2572 void *ptr;
2573
2574 GetTempFileNameA(".", name, 0, path);
2575
2577 ok(file != INVALID_HANDLE_VALUE, "file creation failed, at %s, error %lu\n", path, GetLastError());
2578
2579 res = FindResourceA(NULL, name, "TESTDLL");
2580 ok( res != 0, "couldn't find resource\n" );
2583 ok( written == SizeofResource( GetModuleHandleA(NULL), res ), "couldn't write resource\n" );
2584 CloseHandle( file );
2585
2586 return path;
2587}
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
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

◆ mem_alloc()

static void *CDECL mem_alloc ( ULONG  cb)
static

Definition at line 2110 of file install.c.

2111{
2112 return malloc(cb);
2113}

◆ mem_free()

static void CDECL mem_free ( void *  memory)
static

Definition at line 2115 of file install.c.

2116{
2117 free(memory);
2118}

◆ ok_callback()

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

Definition at line 2589 of file install.c.

2590{
2591 if (message_type == INSTALLMESSAGE_USER)
2592 {
2593 char file[200];
2594 char msg[2000];
2595 DWORD len;
2596
2597 len = sizeof(file);
2599 len = sizeof(msg);
2601
2604
2605 return 1;
2606 }
2607 return 0;
2608}
#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: minitest.h:81
@ INSTALLMESSAGE_USER
Definition: msi.h:97

Referenced by add_custom_dll().

◆ pf_exists()

BOOL pf_exists ( const char *  file)

Definition at line 3526 of file install.c.

3527{
3529
3531 lstrcatA(path, "\\");
3532 lstrcatA(path, file);
3533
3534 return file_exists(path);
3535}
BOOL file_exists(const char *file)
Definition: install.c:3521

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 5159 of file install.c.

5160{
5161 char *buf, *src, *dst, *buf2, *buf2ptr;
5162 DWORD size;
5163 LONG ret;
5164 BOOL found = FALSE;
5165
5167 ok(!ret, "RegQueryValueExA failed %ld\n", ret);
5168
5169 buf = malloc(size + 1);
5170 buf2ptr = buf2 = calloc(1, size + 1);
5171
5173 buf[size] = 0;
5174 ok(!ret, "RegQueryValueExA failed %ld\n", ret);
5175 if (ret) return;
5176
5177 for (src = buf; *src; src = dst + strlen(dst) + 1)
5178 {
5180 BOOL fileret;
5181
5182 dst = src + strlen(src) + 1;
5183
5184 if (!strstr(src, "msitest"))
5185 {
5186 lstrcpyA(buf2ptr, src);
5187 buf2ptr += strlen(src) + 1;
5188 lstrcpyA(buf2ptr, dst);
5189 buf2ptr += strlen(dst) + 1;
5190 continue;
5191 }
5192
5193 found = TRUE;
5194
5195 if (*dst == '!')
5196 {
5198 dst++;
5199 }
5200 if (src[0] == '\\' && src[1] == '?' && src[2] == '?' && src[3] == '\\') src += 4;
5201 if (*dst)
5202 {
5203 if (dst[0] == '\\' && dst[1] == '?' && dst[2] == '?' && dst[3] == '\\') dst += 4;
5204 fileret = MoveFileExA(src, dst, flags);
5205 ok(fileret, "Failed to move file %s -> %s (%lu)\n", src, dst, GetLastError());
5206 }
5207 else
5208 {
5209 fileret = DeleteFileA(src);
5210 ok(fileret, "Failed to delete file %s (%lu)\n", src, GetLastError());
5211 }
5212 }
5213
5214 ok(found, "Expected a 'msitest' entry\n");
5215
5216 if (*buf2)
5217 RegSetValueExA(hkey, rename_ops, 0, REG_MULTI_SZ, (LPBYTE)buf2, buf2ptr + 1 - buf2);
5218 else
5220
5221 free(buf);
5222 free(buf2);
5223}
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
_ACRTIMP char *__cdecl strstr(const char *, const char *)
Definition: string.c:3420
#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:5157
BOOL WINAPI MoveFileExA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName OPTIONAL, IN DWORD dwFlags)
Definition: moveansi.c:39
#define REG_MULTI_SZ
Definition: nt_native.h:1504
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 2126 of file install.c.

2127{
2128 return 0;
2129}

◆ run_query()

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

Definition at line 3559 of file install.c.

3560{
3561 MSIHANDLE hview = 0;
3562 UINT r;
3563
3564 r = MsiDatabaseOpenViewA(hdb, query, &hview);
3565 if(r != ERROR_SUCCESS)
3566 return r;
3567
3568 r = MsiViewExecute(hview, hrec);
3569 if(r == ERROR_SUCCESS)
3570 r = MsiViewClose(hview);
3571 MsiCloseHandle(hview);
3572 return r;
3573}
UINT WINAPI MsiViewClose(MSIHANDLE hView)
Definition: msiquery.c:465
UINT WINAPI MsiViewExecute(MSIHANDLE hView, MSIHANDLE hRec)
Definition: msiquery.c:514
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 3889 of file install.c.

3890{
3891 IStorage *stg;
3892 IStream *stm;
3893 WCHAR fileW[MAX_PATH];
3894 HRESULT hr;
3895 DWORD count;
3897
3898 MultiByteToWideChar(CP_ACP, 0, file, -1, fileW, MAX_PATH);
3899
3900 hr = StgOpenStorage(fileW, NULL, mode, NULL, 0, &stg);
3901 ok(hr == S_OK, "Expected S_OK, got %#lx\n", hr);
3902 if (!stg)
3903 return;
3904
3905 hr = IStorage_CreateStream(stg, L"\x41ca\x4330\x3e71\x44b5\x4233\x45f5\x422c\x4836",
3906 STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, 0, &stm);
3907 ok(hr == S_OK, "Expected S_OK, got %#lx\n", hr);
3908
3909 hr = IStream_Write(stm, L"MYPROP=2718 MyProp=42", sizeof(L"MYPROP=2718 MyProp=42"), &count);
3910 ok(hr == S_OK, "Expected S_OK, got %#lx\n", hr);
3911
3912 IStream_Release(stm);
3913 IStorage_Release(stg);
3914}
HRESULT hr
Definition: delayimp.cpp:582
HRESULT WINAPI StgOpenStorage(const OLECHAR *pwcsName, IStorage *pstgPriority, DWORD grfMode, SNB snbExclude, DWORD reserved, IStorage **ppstgOpen)
Definition: storage32.c:8701
#define L(x)
Definition: resources.c:13

Referenced by test_adminprops().

◆ set_admin_summary_info()

static void set_admin_summary_info ( const WCHAR *  name)
static

Definition at line 3826 of file install.c.

3827{
3828 MSIHANDLE db, summary;
3829 UINT r;
3830
3832 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3833
3834 r = MsiGetSummaryInformationA(db, NULL, 1, &summary);
3835 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3836
3838 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3839
3840 /* write the summary changes back to the stream */
3841 r = MsiSummaryInfoPersist(summary);
3842 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3843
3844 MsiCloseHandle(summary);
3845
3846 r = MsiDatabaseCommit(db);
3847 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3848
3849 MsiCloseHandle(db);
3850}
@ 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:941
UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase, const char *szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
Definition: suminfo.c:588
UINT WINAPI MsiSummaryInfoPersist(MSIHANDLE handle)
Definition: suminfo.c:1226
#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 2294 of file install.c.

2295{
2296 ZeroMemory(pCabParams, sizeof(CCAB));
2297
2298 pCabParams->cb = max_size;
2299 pCabParams->cbFolderThresh = FOLDER_THRESHOLD;
2300 pCabParams->setID = 0xbeef;
2301 pCabParams->iCab = 1;
2302 lstrcpyA(pCabParams->szCabPath, CURR_DIR);
2303 lstrcatA(pCabParams->szCabPath, "\\");
2304 lstrcpyA(pCabParams->szCab, name);
2305}
#define FOLDER_THRESHOLD
Definition: install.c:2106
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 3575 of file install.c.

3576{
3577 UINT r;
3578 MSIHANDLE suminfo = 0;
3579
3580 /* build summary info */
3582 ok(r == ERROR_SUCCESS , "Failed to open summaryinfo\n");
3583
3585 ok(r == ERROR_SUCCESS, "Failed to set summary info\n");
3586
3588 "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}1.1.1;"
3589 "{7DF88A48-996F-4EC8-A022-BF956F9B2CBB}1.1.1;"
3590 "{4C0EAA15-0264-4E5A-8758-609EF142B92D}");
3591 ok(r == ERROR_SUCCESS , "Failed to set summary info\n");
3592
3594 ok(r == ERROR_SUCCESS, "Failed to set summary info\n");
3595
3597 ok(r == ERROR_SUCCESS , "Failed to make summary info persist\n");
3598
3600 ok(r == ERROR_SUCCESS , "Failed to close suminfo\n");
3601}
static const CHAR suminfo[]
Definition: db.c:2166
@ 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 6305 of file install.c.

6306{
6307 DWORD len;
6308 char temp_path[MAX_PATH], prev_path[MAX_PATH], log_file[MAX_PATH];
6309
6311
6312 subtest("custom");
6313
6315
6316 GetCurrentDirectoryA(MAX_PATH, prev_path);
6319
6322
6323 if(len && (CURR_DIR[len - 1] == '\\'))
6324 CURR_DIR[len - 1] = 0;
6325
6326 ok(get_system_dirs(), "failed to retrieve system dirs\n");
6327 ok(get_user_dirs(), "failed to retrieve user dirs\n");
6328
6329 /* Create only one log file and don't append. We have to pass something
6330 * for the log mode for this to work. The logfile needs to have an absolute
6331 * path otherwise we still end up with some extra logfiles as some tests
6332 * change the current directory.
6333 */
6335 lstrcatA(log_file, "\\msitest.log");
6337
6342 test_caborder();
6352 test_admin();
6363 test_propcase();
6365 test_shortcut();
6381 test_wow64();
6383
6386 SetCurrentDirectoryA(prev_path);
6387}
#define IsWow64Process
Definition: compat.h:760
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
Definition: path.c:2164
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
Definition: path.c:2224
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
Definition: path.c:2072
UINT WINAPI MsiEnableLogA(DWORD dwLogMode, const char *szLogFile, DWORD attributes)
Definition: msi.c:1882
UNICODE_STRING log_file
Definition: btrfs.c:89
#define subtest
Definition: minitest.h:64
void restart_as_admin_elevated(void)
Definition: action.c:6478
static void test_volume_props(void)
Definition: install.c:6025
static void test_shared_component(void)
Definition: install.c:6051
static void test_sourcedirprop(void)
Definition: install.c:4714
static void test_packagecoltypes(void)
Definition: install.c:2905
static void test_upgrade_code(void)
Definition: install.c:5840
static void test_continuouscabs(void)
Definition: install.c:3021
static void test_sourcepath(void)
Definition: install.c:4578
static void test_propcase(void)
Definition: install.c:4837
static void test_remove_upgrade_code(void)
Definition: install.c:6095
static void test_int_widths(void)
Definition: install.c:4880
static void test_admin(void)
Definition: install.c:3852
static void test_icon_table(void)
Definition: install.c:5442
static void test_uiLevelFlags(void)
Definition: install.c:3286
static void test_installed_prop(void)
Definition: install.c:5045
static void test_setdirproperty(void)
Definition: install.c:3440
static void test_allusers_prop(void)
Definition: install.c:5085
static void test_customaction1(void)
Definition: install.c:4083
BOOL get_user_dirs(void)
Definition: install.c:2338
static void test_preselected(void)
Definition: install.c:4990
static void test_file_in_use(void)
Definition: install.c:5243
static void test_wow64(void)
Definition: install.c:6216
static BOOL is_wow64
Definition: install.c:39
BOOL get_system_dirs(void)
Definition: install.c:2357
static void test_feature_tree(void)
Definition: install.c:6146
static void test_MsiSetComponentState(void)
Definition: install.c:2856
static void test_adminprops(void)
Definition: install.c:3916
static void test_currentworkingdir(void)
Definition: install.c:3760
static void test_adminimage(void)
Definition: install.c:4766
static void test_deferred_action(void)
Definition: install.c:6187
static void test_samesequence(void)
Definition: install.c:3257
static void test_MsiInstallProduct(void)
Definition: install.c:2671
static void test_transformprop(void)
Definition: install.c:3714
BOOL is_process_elevated(void)
Definition: install.c:2211
static void test_readonlyfile_cab(void)
Definition: install.c:3379
static void test_package_validation(void)
Definition: install.c:5524
static void test_sourcefolder(void)
Definition: install.c:4037
static void test_file_in_use_cab(void)
Definition: install.c:5302
static void test_cabisextracted(void)
Definition: install.c:3473
static void test_mixedmedia(void)
Definition: install.c:3214
static void test_feature_override(void)
Definition: install.c:5365
static void test_installstate(void)
Definition: install.c:4173
static void test_shortcut(void)
Definition: install.c:4942
static void test_caborder(void)
Definition: install.c:3128
static void test_customaction51(void)
Definition: install.c:4140
static void test_readonlyfile(void)
Definition: install.c:3331
static void test_missingcomponent(void)
Definition: install.c:4659
static void test_mixed_package(void)
Definition: install.c:5872
static void test_source_resolution(void)
Definition: install.c:6276
static void test_missingcab(void)
Definition: install.c:3967
@ INSTALLLOGMODE_FATALEXIT
Definition: msi.h:131
char temp_path[MAX_PATH]
Definition: mspatcha.c:123

◆ test_admin()

static void test_admin ( void  )
static

Definition at line 3852 of file install.c.

3853{
3854 UINT r;
3855
3856 CreateDirectoryA("msitest", NULL);
3857 create_file("msitest\\augustus", 500);
3858
3861
3863
3866 {
3867 skip("Not enough rights to perform tests\n");
3868 goto error;
3869 }
3870 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3871 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3872 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3873 ok(!DeleteFileA("c:\\msitest\\augustus"), "File installed\n");
3874 ok(!RemoveDirectoryA("c:\\msitest"), "File installed\n");
3875
3876 r = MsiInstallProductA(msifile, "ACTION=ADMIN");
3877 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3878 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3879 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3880 ok(DeleteFileA("c:\\msitest\\augustus"), "File not installed\n");
3881 ok(RemoveDirectoryA("c:\\msitest"), "File not installed\n");
3882
3883error:
3885 DeleteFileA("msitest\\augustus");
3886 RemoveDirectoryA("msitest");
3887}
#define skip(...)
Definition: atltest.h:64
UINT WINAPI MsiInstallProductA(LPCSTR szPackagePath, LPCSTR szCommandLine)
Definition: msi.c:198
INSTALLUILEVEL WINAPI MsiSetInternalUI(INSTALLUILEVEL dwUILevel, HWND *phWnd)
Definition: msi.c:2281
#define error(str)
Definition: mkdosfs.c:1605
static void set_admin_summary_info(const WCHAR *name)
Definition: install.c:3826
static const msi_table adm_tables[]
Definition: install.c:1708
#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:1331

Referenced by START_TEST().

◆ test_adminimage()

static void test_adminimage ( void  )
static

Definition at line 4766 of file install.c.

4767{
4768 UINT r;
4769
4770 if (!is_process_elevated())
4771 {
4772 skip("process is limited\n");
4773 return;
4774 }
4775
4776 CreateDirectoryA("msitest", NULL);
4777 CreateDirectoryA("msitest\\first", NULL);
4778 CreateDirectoryA("msitest\\second", NULL);
4779 CreateDirectoryA("msitest\\cabout", NULL);
4780 CreateDirectoryA("msitest\\cabout\\new", NULL);
4781 create_file("msitest\\one.txt", 100);
4782 create_file("msitest\\first\\two.txt", 100);
4783 create_file("msitest\\second\\three.txt", 100);
4784 create_file("msitest\\cabout\\four.txt", 100);
4785 create_file("msitest\\cabout\\new\\five.txt", 100);
4786 create_file("msitest\\filename", 100);
4787
4790 "{004757CA-5092-49C2-AD20-28E1CE0DF5F2}");
4791
4793
4796 {
4797 skip("Not enough rights to perform tests\n");
4798 goto error;
4799 }
4800 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4801
4803
4804 create_file("four.txt", 100);
4805 create_file("five.txt", 100);
4806 create_cab_file("msitest.cab", MEDIA_SIZE, "four.txt\0five.txt\0");
4809 ";1033", "{004757CA-5092-49C2-AD20-28E1CE0DF5F2}");
4810
4812
4814 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4815
4816 ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
4817 ok(delete_pf("msitest\\cabout\\new", FALSE), "Directory not created\n");
4818 ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
4819 ok(delete_pf("msitest\\cabout", FALSE), "Directory not created\n");
4820 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4821
4822error:
4823 DeleteFileA("msifile");
4824 DeleteFileA("msitest\\cabout\\new\\five.txt");
4825 DeleteFileA("msitest\\cabout\\four.txt");
4826 DeleteFileA("msitest\\second\\three.txt");
4827 DeleteFileA("msitest\\first\\two.txt");
4828 DeleteFileA("msitest\\one.txt");
4829 DeleteFileA("msitest\\filename");
4830 RemoveDirectoryA("msitest\\cabout\\new");
4831 RemoveDirectoryA("msitest\\cabout");
4832 RemoveDirectoryA("msitest\\second");
4833 RemoveDirectoryA("msitest\\first");
4834 RemoveDirectoryA("msitest");
4835}
static void delete_pf_files(void)
Definition: install.c:2510
static const msi_table ai2_tables[]
Definition: install.c:1836
static const msi_table ai_tables[]
Definition: install.c:1824
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:2633
@ 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 3916 of file install.c.

3917{
3918 UINT r;
3919
3920 if (!is_process_elevated())
3921 {
3922 skip("process is limited\n");
3923 return;
3924 }
3925
3926 CreateDirectoryA("msitest", NULL);
3927 create_file("msitest\\augustus", 500);
3928
3932
3934
3937 {
3938 skip("Not enough rights to perform tests\n");
3939 goto error;
3940 }
3941 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3942 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
3943 ok(delete_pf("msitest", FALSE), "Directory created\n");
3944
3945error:
3947 DeleteFileA("msitest\\augustus");
3948 RemoveDirectoryA("msitest");
3949}
static const msi_table amp_tables[]
Definition: install.c:1722
static void set_admin_property_stream(LPCSTR file)
Definition: install.c:3889

Referenced by START_TEST().

◆ test_allusers_prop()

static void test_allusers_prop ( void  )
static

Definition at line 5085 of file install.c.

5086{
5087 UINT r;
5088
5089 if (!is_process_elevated())
5090 {
5091 skip("process is limited\n");
5092 return;
5093 }
5094
5097
5099
5100 /* ALLUSERS property unset */
5101 r = MsiInstallProductA(msifile, "FULL=1");
5103 {
5104 skip("Not enough rights to perform tests\n");
5105 goto error;
5106 }
5107 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5108
5110
5111 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5112 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5113
5115
5118
5119 /* ALLUSERS property set to 1 */
5120 r = MsiInstallProductA(msifile, "FULL=1");
5121 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5122
5124
5125 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5126 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5127
5129
5132
5133 /* ALLUSERS property set to 2 */
5134 r = MsiInstallProductA(msifile, "FULL=1");
5135 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5136
5138
5139 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5140 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5141
5143
5146
5147 /* ALLUSERS property set to 2, conditioned on ALLUSERS = 1 */
5148 r = MsiInstallProductA(msifile, "FULL=1");
5149 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
5150
5151error:
5154}
static const msi_table aup2_tables[]
Definition: install.c:1886
static void delete_test_files(void)
Definition: install.c:2497
static const msi_table aup4_tables[]
Definition: install.c:1912
static void create_test_files(void)
Definition: install.c:2414
static const msi_table aup3_tables[]
Definition: install.c:1899
static const msi_table aup_tables[]
Definition: install.c:1873
#define ERROR_INSTALL_FAILURE
Definition: winerror.h:1309

Referenced by START_TEST().

◆ test_cabisextracted()

static void test_cabisextracted ( void  )
static

Definition at line 3473 of file install.c.

3474{
3475 UINT r;
3476
3477 if (!is_process_elevated())
3478 {
3479 skip("process is limited\n");
3480 return;
3481 }
3482
3483 CreateDirectoryA("msitest", NULL);
3484 create_file("msitest\\gaius", 500);
3485 create_file("maximus", 500);
3486 create_file("augustus", 500);
3487 create_file("caesar", 500);
3488
3489 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3490 create_cab_file("test2.cab", MEDIA_SIZE, "augustus\0");
3491 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3492
3494
3496
3499 {
3500 skip("Not enough rights to perform tests\n");
3501 goto error;
3502 }
3503 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3504 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3505 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3506 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3507 ok(delete_pf("msitest\\gaius", TRUE), "File not installed\n");
3508 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3509
3510error:
3511 /* Delete the files in the temp (current) folder */
3514 DeleteFileA("maximus");
3515 DeleteFileA("augustus");
3516 DeleteFileA("caesar");
3517 DeleteFileA("msitest\\gaius");
3518 RemoveDirectoryA("msitest");
3519}
static const msi_table cie_tables[]
Definition: install.c:1672
void delete_cab_files(void)
Definition: install.c:3003

Referenced by START_TEST().

◆ test_caborder()

static void test_caborder ( void  )
static

Definition at line 3128 of file install.c.

3129{
3130 UINT r;
3131
3132 create_file("imperator", 100);
3133 create_file("maximus", 500);
3134 create_file("augustus", 50000);
3135 create_file("caesar", 500);
3136
3138
3140
3141 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3142 create_cab_file("test2.cab", MEDIA_SIZE, "augustus\0");
3143 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3144
3147 {
3148 skip("Not enough rights to perform tests\n");
3149 goto error;
3150 }
3151 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3152 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3153 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3154 todo_wine
3155 {
3156 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3157 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3158 }
3159
3161
3162 create_cab_file("test1.cab", MEDIA_SIZE, "imperator\0");
3163 create_cab_file("test2.cab", MEDIA_SIZE, "maximus\0augustus\0");
3164 create_cab_file("test3.cab", MEDIA_SIZE, "caesar\0");
3165
3167 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3168 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3169 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3170 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3171 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3172
3175
3178
3180 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3181 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3182 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3183 todo_wine
3184 {
3185 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3186 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3187 }
3188
3191
3194
3196 ok(!delete_pf("msitest\\caesar", TRUE), "File is installed\n");
3197 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3198 todo_wine
3199 {
3200 ok(!delete_pf("msitest\\augustus", TRUE), "File is installed\n");
3201 ok(!delete_pf("msitest\\maximus", TRUE), "File is installed\n");
3202 ok(!delete_pf("msitest", FALSE), "Directory is created\n");
3203 }
3204
3205error:
3207 DeleteFileA("imperator");
3208 DeleteFileA("maximus");
3209 DeleteFileA("augustus");
3210 DeleteFileA("caesar");
3212}
static const msi_table cc_tables[]
Definition: install.c:1537
static void create_cc_test_files(void)
Definition: install.c:2960
static const msi_table co_tables[]
Definition: install.c:1573
static const msi_table co2_tables[]
Definition: install.c:1585

Referenced by START_TEST().

◆ test_continuouscabs()

static void test_continuouscabs ( void  )
static

Definition at line 3021 of file install.c.

3022{
3023 UINT r;
3024
3025 if (!is_process_elevated())
3026 {
3027 skip("process is limited\n");
3028 return;
3029 }
3030
3033
3035
3038 {
3039 skip("Not enough rights to perform tests\n");
3040 goto error;
3041 }
3042 else
3043 {
3044 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3045 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3046 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3047 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3048 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3049 }
3050
3053
3056
3058
3061 {
3062 skip("Not enough rights to perform tests\n");
3063 }
3064 else
3065 {
3066 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3067 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3068 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3069 ok(delete_pf("msitest\\tiberius", TRUE), "File not installed\n");
3070 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3071 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3072 }
3073
3076
3077 /* Tests to show that only msi cab filename is taken in case of mismatch with the one given by previous cab */
3078
3079 /* Filename from cab is right and the one from msi is wrong */
3082
3084
3087 {
3088 skip("Not enough rights to perform tests\n");
3089 }
3090 else
3091 {
3092 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
3093 todo_wine ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3094 ok(!delete_pf("msitest\\caesar", TRUE), "File installed\n");
3095 todo_wine ok(!delete_pf("msitest\\maximus", TRUE), "File installed\n");
3096 todo_wine ok(!delete_pf("msitest", FALSE), "Directory created\n");
3097 }
3098
3101
3102 /* Filename from msi is right and the one from cab is wrong */
3104 ok(MoveFileA("test2.cab", "test2_.cab"), "Cannot rename test2.cab to test2_.cab\n");
3106
3108
3111 {
3112 skip("Not enough rights to perform tests\n");
3113 }
3114 else
3115 {
3116 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3117 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3118 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3119 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3120 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3121 }
3122
3123error:
3126}
static const msi_table cc3_tables[]
Definition: install.c:1561
static const msi_table cc2_tables[]
Definition: install.c:1549
BOOL WINAPI MoveFileA(IN LPCSTR lpExistingFileName, IN LPCSTR lpNewFileName)
Definition: moveansi.c:23

Referenced by START_TEST().

◆ test_currentworkingdir()

static void test_currentworkingdir ( void  )
static

Definition at line 3760 of file install.c.

3761{
3762 UINT r;
3764 LPSTR ptr;
3765
3766 if (!is_process_elevated())
3767 {
3768 skip("process is limited\n");
3769 return;
3770 }
3771
3772 CreateDirectoryA("msitest", NULL);
3773 create_file("msitest\\augustus", 500);
3774
3776
3778
3779 CreateDirectoryA("diffdir", NULL);
3780 SetCurrentDirectoryA("diffdir");
3781
3782 sprintf(path, "..\\%s", msifile);
3784 todo_wine
3785 {
3786 ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
3787 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3788 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3789 }
3790
3791 sprintf(path, "%s\\%s", CURR_DIR, msifile);
3794 {
3795 skip("Not enough rights to perform tests\n");
3796 goto error;
3797 }
3798 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3799 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3800 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3801
3803 drive[2] = '\\';
3804 drive[3] = '\0';
3806
3808 if (path[lstrlenA(path) - 1] != '\\') lstrcatA(path, "\\");
3810 ptr = strchr(path, ':');
3811 ptr +=2;
3812
3814 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3815 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3816 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3817
3818error:
3821 DeleteFileA("msitest\\augustus");
3822 RemoveDirectoryA("msitest");
3823 RemoveDirectoryA("diffdir");
3824}
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3291
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
static const msi_table cwd_tables[]
Definition: install.c:1696

Referenced by START_TEST().

◆ test_customaction1()

static void test_customaction1 ( void  )
static

Definition at line 4083 of file install.c.

4084{
4085 MSIHANDLE hdb, record;
4086 UINT r;
4087
4090
4091 /* create a test table */
4093 run_query(hdb, 0, "CREATE TABLE `Test` (`Name` CHAR(10), `Number` INTEGER, `Data` OBJECT PRIMARY KEY `Name`)");
4094 create_file("unus", 10);
4095 create_file("duo", 10);
4097 MsiRecordSetStreamA(record, 1, "unus");
4098 run_query(hdb, record, "INSERT INTO `Test` (`Name`, `Number`, `Data`) VALUES ('one', 1, ?)");
4099 MsiRecordSetStreamA(record, 1, "duo");
4100 run_query(hdb, record, "INSERT INTO `Test` (`Name`, `Number`, `Data`) VALUES ('two', 2, ?)");
4101 MsiDatabaseCommit(hdb);
4102 MsiCloseHandle(hdb);
4103
4105
4106 r = MsiInstallProductA(msifile, "MAIN_TEST=1");
4107 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4108
4109 /* Test return values */
4110 r = MsiInstallProductA(msifile, "TEST_RETVAL=0");
4111 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4112
4113 r = MsiInstallProductA(msifile, "TEST_RETVAL=1626"); /* ERROR_FUNCTION_NOT_CALLED */
4114 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4115
4116 r = MsiInstallProductA(msifile, "TEST_RETVAL=1602");
4117 ok(r == ERROR_INSTALL_USEREXIT, "Expected ERROR_INSTALL_USEREXIT, got %u\n", r);
4118
4119 r = MsiInstallProductA(msifile, "TEST_RETVAL=259"); /* ERROR_NO_MORE_ITEMS */
4120 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4121
4122 /* any other error maps to ERROR_INSTALL_FAILURE */
4123 r = MsiInstallProductA(msifile, "TEST_RETVAL=1");
4124 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4125
4126 /* Custom actions execute in the same process, but they don't retain state */
4127 r = MsiInstallProductA(msifile, "TEST_PROCESS=1");
4128 ok(!r, "got %u\n", r);
4129
4130 /* test asynchronous actions (msidbCustomActionTypeAsync) */
4131 r = MsiInstallProductA(msifile, "TEST_ASYNC=1");
4132 ok(!r, "got %u\n", r);
4133
4136 DeleteFileA("unus");
4137 DeleteFileA("duo");
4138}
static const msi_table ca1_tables[]
Definition: install.c:1759
#define ERROR_INSTALL_USEREXIT
Definition: winerror.h:1308

Referenced by START_TEST().

◆ test_customaction51()

static void test_customaction51 ( void  )
static

Definition at line 4140 of file install.c.

4141{
4142 UINT r;
4143
4144 if (!is_process_elevated())
4145 {
4146 skip("process is limited\n");
4147 return;
4148 }
4149
4150 CreateDirectoryA("msitest", NULL);
4151 create_file("msitest\\augustus", 500);
4152
4154
4156
4159 {
4160 skip("Not enough rights to perform tests\n");
4161 goto error;
4162 }
4163 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4164 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
4165 ok(delete_pf("msitest", FALSE), "Directory created\n");
4166
4167error:
4169 DeleteFileA("msitest\\augustus");
4170 RemoveDirectoryA("msitest");
4171}
static const msi_table ca51_tables[]
Definition: install.c:1775

Referenced by START_TEST().

◆ test_deferred_action()

static void test_deferred_action ( void  )
static

Definition at line 6187 of file install.c.

6188{
6189 char path[200], file[200], buffer[211];
6190 UINT r;
6191
6192 GetTempPathA(sizeof(path), path);
6193 GetTempFileNameA(path, "da", 0, file);
6194 sprintf(buffer, "TESTPATH=\"%s\"", file);
6195
6197
6199
6202 {
6203 skip("Not enough rights to perform tests\n");
6204 goto error;
6205 }
6206 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
6207
6208 check_file_matches(file, "onetwo");
6209
6210 ok(DeleteFileA(file), "Directory not created\n");
6211
6212error:
6214}
static const msi_table da_tables[]
Definition: install.c:2064
static void check_file_matches(const char *filename, const char *text)
Definition: install.c:6175

Referenced by START_TEST().

◆ test_feature_override()

static void test_feature_override ( void  )
static

Definition at line 5365 of file install.c.

5366{
5367 UINT r;
5369
5370 if (!is_process_elevated())
5371 {
5372 skip("process is limited\n");
5373 return;
5374 }
5375
5377 create_file("msitest\\override.txt", 1000);
5378 create_file("msitest\\preselected.txt", 1000);
5379 create_file("msitest\\notpreselected.txt", 1000);
5381
5382 if (is_wow64)
5384
5386
5387 r = MsiInstallProductA(msifile, "ADDLOCAL=override");
5389 {
5390 skip("Not enough rights to perform tests\n");
5391 goto error;
5392 }
5393 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5394
5395 ok(pf_exists("msitest\\override.txt"), "file not installed\n");
5396 ok(!pf_exists("msitest\\preselected.txt"), "file installed\n");
5397 ok(!pf_exists("msitest\\notpreselected.txt"), "file installed\n");
5398
5399 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5400 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5401
5402 ok(!delete_pf("msitest\\override.txt", TRUE), "file not removed\n");
5403
5404 r = MsiInstallProductA(msifile, "preselect=1");
5405 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5406
5407 ok(pf_exists("msitest\\override.txt"), "file not installed\n");
5408 ok(pf_exists("msitest\\preselected.txt"), "file not installed\n");
5409 ok(!pf_exists("msitest\\notpreselected.txt"), "file installed\n");
5410
5411 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5412 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5413
5414 ok(!delete_pf("msitest\\override.txt", TRUE), "file not removed\n");
5415 ok(!delete_pf("msitest\\preselected.txt", TRUE), "file not removed\n");
5416 ok(!delete_pf("msitest", FALSE), "directory not removed\n");
5417
5419 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5420
5421 ok(pf_exists("msitest\\override.txt"), "file not installed\n");
5422 ok(pf_exists("msitest\\preselected.txt"), "file not installed\n");
5423 ok(!pf_exists("msitest\\notpreselected.txt"), "file installed\n");
5424
5425 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5426 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5427
5428 ok(!delete_pf("msitest\\override.txt", TRUE), "file not removed\n");
5429 ok(!delete_pf("msitest\\preselected.txt", TRUE), "file not removed\n");
5430 ok(!delete_pf("msitest", FALSE), "directory not removed\n");
5431
5432 RegDeleteKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", access, 0);
5433
5434error:
5435 DeleteFileA("msitest\\override.txt");
5436 DeleteFileA("msitest\\preselected.txt");
5437 DeleteFileA("msitest\\notpreselected.txt");
5440}
LONG WINAPI RegDeleteKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ REGSAM samDesired, _In_ DWORD Reserved)
Definition: reg.c:1254
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
BOOL pf_exists(const char *file)
Definition: install.c:3526
static const msi_table fo_tables[]
Definition: install.c:1949
#define KEY_ALL_ACCESS
Definition: nt_native.h:1044
ACCESS_MASK REGSAM
Definition: winreg.h:76

Referenced by START_TEST().

◆ test_feature_tree()

static void test_feature_tree ( void  )
static

Definition at line 6146 of file install.c.

6147{
6148 UINT r;
6149
6150 if (!is_process_elevated())
6151 {
6152 skip( "process is limited\n" );
6153 return;
6154 }
6155
6156 create_file( "msitest\\featuretree.txt", 1000 );
6158
6160
6161 r = MsiInstallProductA( msifile, "INSTALLTYPE=\"0\"" );
6162 ok( r == ERROR_INSTALL_FAILURE, "got %u\n", r );
6163
6164 r = MsiInstallProductA( msifile, "INSTALLTYPE=\"1\"" );
6165 ok( r == ERROR_SUCCESS, "got %u\n", r );
6166
6167 r = MsiInstallProductA( msifile, "REMOVE=ALL" );
6168 ok( r == ERROR_SUCCESS, "got %u\n", r );
6169
6170 DeleteFileA( "msitest\\featuretree.txt" );
6171 RemoveDirectoryA( "msitest" );
6173}
static const msi_table ft_tables[]
Definition: install.c:2050

Referenced by START_TEST().

◆ test_file_in_use()

static void test_file_in_use ( void  )
static

Definition at line 5243 of file install.c.

5244{
5245 UINT r;
5246 HANDLE file;
5247 HKEY hkey;
5248 char path[MAX_PATH];
5249
5250 if (!is_process_elevated())
5251 {
5252 skip("process is limited\n");
5253 return;
5254 }
5255
5257
5258 CreateDirectoryA("msitest", NULL);
5259 create_file("msitest\\maximus", 500);
5261
5263
5265 lstrcatA(path, "\\msitest");
5267
5268 lstrcatA(path, "\\maximus");
5270
5271 r = MsiInstallProductA(msifile, "REBOOT=ReallySuppress FULL=1");
5273 {
5274 skip("Not enough rights to perform tests\n");
5275 goto error;
5276 }
5277 ok(r == ERROR_SUCCESS_REBOOT_REQUIRED, "Expected ERROR_SUCCESS_REBOOT_REQUIRED got %u\n", r);
5278 ok(!file_matches_data(path, "msitest\\maximus"), "Expected file not to match\n");
5280 ok(!file_matches_data(path, "msitest\\maximus"), "Expected file not to match\n");
5281
5283 RegCloseKey(hkey);
5284
5285 ok(file_matches_data(path, "msitest\\maximus"), "Expected file to match\n");
5286 ok(delete_pf("msitest\\maximus", TRUE), "File not present\n");
5287 ok(delete_pf("msitest", FALSE), "Directory not present or not empty\n");
5288
5289 r = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5290 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5291
5292error:
5293 RegCloseKey(hkey);
5294
5295 delete_pf("msitest\\maximus", TRUE);
5296 delete_pf("msitest", FALSE);
5297 DeleteFileA("msitest\\maximus");
5300}
static const msi_table fiu_tables[]
Definition: install.c:1925
static void process_pending_renames(HKEY hkey)
Definition: install.c:5159
static BOOL file_matches_data(LPCSTR file, LPCSTR data)
Definition: install.c:5225
static const char session_manager[]
Definition: install.c:5156
#define ERROR_SUCCESS_REBOOT_REQUIRED
Definition: winerror.h:1580

Referenced by START_TEST().

◆ test_file_in_use_cab()

static void test_file_in_use_cab ( void  )
static

Definition at line 5302 of file install.c.

5303{
5304 UINT r;
5305 HANDLE file;
5306 HKEY hkey;
5307 char path[MAX_PATH];
5308
5309 if (!is_process_elevated())
5310 {
5311 skip("process is limited\n");
5312 return;
5313 }
5314
5316
5317 CreateDirectoryA("msitest", NULL);
5318 create_file("maximus", 500);
5319 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
5320 DeleteFileA("maximus");
5321
5323
5325
5327 lstrcatA(path, "\\msitest");
5329
5330 lstrcatA(path, "\\maximus");
5332
5333 r = MsiInstallProductA(msifile, "REBOOT=ReallySuppress FULL=1");
5335 {
5336 skip("Not enough rights to perform tests\n");
5337 goto error;
5338 }
5339 ok(r == ERROR_SUCCESS_REBOOT_REQUIRED, "Expected ERROR_SUCCESS_REBOOT_REQUIRED got %u\n", r);
5340 ok(!file_matches_data(path, "maximus"), "Expected file not to match\n");
5342 ok(!file_matches_data(path, "maximus"), "Expected file not to match\n");
5343
5345 RegCloseKey(hkey);
5346
5347 ok(file_matches_data(path, "maximus"), "Expected file to match\n");
5348 ok(delete_pf("msitest\\maximus", TRUE), "File not present\n");
5349 ok(delete_pf("msitest", FALSE), "Directory not present or not empty\n");
5350
5351 r = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5352 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5353
5354error:
5355 RegCloseKey(hkey);
5356
5357 delete_pf("msitest\\maximus", TRUE);
5358 delete_pf("msitest", FALSE);
5359 DeleteFileA("msitest\\maximus");
5363}
static const msi_table fiuc_tables[]
Definition: install.c:1937

Referenced by START_TEST().

◆ test_icon_table()

static void test_icon_table ( void  )
static

Definition at line 5442 of file install.c.

5443{
5444 MSIHANDLE hdb = 0, record;
5445 LPCSTR query;
5446 UINT res;
5448 static const char prodcode[] = "{7DF88A49-996F-4EC8-A022-BF956F9B2CBB}";
5449
5450 if (!is_process_elevated())
5451 {
5452 skip("process is limited\n");
5453 return;
5454 }
5455
5457
5459
5461 ok(res == ERROR_SUCCESS, "failed to open db: %d\n", res);
5462
5463 query = "CREATE TABLE `Icon` (`Name` CHAR(72) NOT NULL, `Data` OBJECT NOT NULL PRIMARY KEY `Name`)";
5464 res = run_query( hdb, 0, query );
5465 ok(res == ERROR_SUCCESS, "Can't create Icon table: %d\n", res);
5466
5467 create_file("icon.ico", 100);
5469 res = MsiRecordSetStreamA(record, 1, "icon.ico");
5470 ok(res == ERROR_SUCCESS, "Failed to add stream data to record: %d\n", res);
5471
5472 query = "INSERT INTO `Icon` (`Name`, `Data`) VALUES ('testicon', ?)";
5473 res = run_query(hdb, record, query);
5474 ok(res == ERROR_SUCCESS, "Insert into Icon table failed: %d\n", res);
5475
5477 ok(res == ERROR_SUCCESS, "Failed to close record handle: %d\n", res);
5478 DeleteFileA("icon.ico");
5479 res = MsiDatabaseCommit(hdb);
5480 ok(res == ERROR_SUCCESS, "Failed to commit database: %d\n", res);
5481 res = MsiCloseHandle(hdb);
5482 ok(res == ERROR_SUCCESS, "Failed to close database: %d\n", res);
5483
5484 /* per-user */
5485 res = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1");
5487 {
5488 skip("Not enough rights to perform tests\n");
5490 return;
5491 }
5492 ok(res == ERROR_SUCCESS, "Failed to do per-user install: %d\n", res);
5493
5495 lstrcatA(path, "\\");
5496 lstrcatA(path, "Microsoft\\Installer\\");
5497 lstrcatA(path, prodcode);
5498 lstrcatA(path, "\\testicon");
5499 ok(file_exists(path), "Per-user icon file isn't where it's expected (%s)\n", path);
5500
5501 res = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5502 ok(res == ERROR_SUCCESS, "Failed to uninstall per-user\n");
5503 ok(!file_exists(path), "Per-user icon file not removed (%s)\n", path);
5504
5505 /* system-wide */
5506 res = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1 ALLUSERS=1");
5507 ok(res == ERROR_SUCCESS, "Failed to system-wide install: %d\n", res);
5508
5510 lstrcatA(path, "\\");
5511 lstrcatA(path, "Installer\\");
5512 lstrcatA(path, prodcode);
5513 lstrcatA(path, "\\testicon");
5514 ok(file_exists(path), "System-wide icon file isn't where it's expected (%s)\n", path);
5515
5516 res = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
5517 ok(res == ERROR_SUCCESS, "Failed to uninstall system-wide\n");
5518 ok(!file_exists(path), "System-wide icon file not removed (%s)\n", path);
5519
5522}
static const msi_table icon_base_tables[]
Definition: install.c:1963
static void delete_pfmsitest_files(void)
Definition: install.c:3537

Referenced by START_TEST().

◆ test_installed_prop()

static void test_installed_prop ( void  )
static

Definition at line 5045 of file install.c.

5046{
5047 static const char prodcode[] = "{7df88a48-996f-4ec8-a022-bf956f9b2cbb}";
5048 UINT r;
5049
5050 if (!is_process_elevated())
5051 {
5052 skip("process is limited\n");
5053 return;
5054 }
5055
5058
5060
5061 r = MsiInstallProductA(msifile, "FULL=1");
5063 {
5064 skip("Not enough rights to perform tests\n");
5065 goto error;
5066 }
5067 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5068
5069 r = MsiInstallProductA(msifile, "FULL=1");
5070 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
5071
5073 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
5074
5076
5077 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5078 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5079
5080error:
5083}
UINT WINAPI MsiConfigureProductExA(LPCSTR szProduct, int iInstallLevel, INSTALLSTATE eInstallState, LPCSTR szCommandLine)
Definition: msi.c:916
static const msi_table ip_tables[]
Definition: install.c:1860
@ 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 4173 of file install.c.

4174{
4175 UINT r;
4176
4177 if (!is_process_elevated())
4178 {
4179 skip("process is limited\n");
4180 return;
4181 }
4182
4183 CreateDirectoryA("msitest", NULL);
4184 create_file("msitest\\alpha", 500);
4185 create_file("msitest\\beta", 500);
4186 create_file("msitest\\gamma", 500);
4187 create_file("msitest\\theta", 500);
4188 create_file("msitest\\delta", 500);
4189 create_file("msitest\\epsilon", 500);
4190 create_file("msitest\\zeta", 500);
4191 create_file("msitest\\iota", 500);
4192 create_file("msitest\\eta", 500);
4193 create_file("msitest\\kappa", 500);
4194 create_file("msitest\\lambda", 500);
4195 create_file("msitest\\mu", 500);
4196
4198
4200
4203 {
4204 skip("Not enough rights to perform tests\n");
4205 goto error;
4206 }
4207 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4208 ok(delete_pf("msitest\\alpha", TRUE), "File not installed\n");
4209 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4210 ok(delete_pf("msitest\\gamma", TRUE), "File not installed\n");
4211 ok(delete_pf("msitest\\theta", TRUE), "File not installed\n");
4212 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4213 ok(!delete_pf("msitest\\epsilon", TRUE), "File installed\n");
4214 ok(!delete_pf("msitest\\zeta", TRUE), "File installed\n");
4215 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4216 ok(!delete_pf("msitest\\eta", TRUE), "File installed\n");
4217 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4218 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4219 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4220 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4221
4222 r = MsiInstallProductA(msifile, "ADDLOCAL=\"one,two,three,four\"");
4223 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4224 ok(delete_pf("msitest\\alpha", TRUE), "File not installed\n");
4225 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4226 ok(delete_pf("msitest\\gamma", TRUE), "File not installed\n");
4227 ok(delete_pf("msitest\\theta", TRUE), "File not installed\n");
4228 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4229 ok(delete_pf("msitest\\epsilon", TRUE), "File not installed\n");
4230 ok(delete_pf("msitest\\zeta", TRUE), "File not installed\n");
4231 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4232 ok(delete_pf("msitest\\eta", TRUE), "File not installed\n");
4233 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4234 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4235 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4236 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4237
4238 r = MsiInstallProductA(msifile, "ADDSOURCE=\"one,two,three,four\"");
4239 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4240 ok(delete_pf("msitest\\alpha", TRUE), "File not installed\n");
4241 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4242 ok(!delete_pf("msitest\\gamma", TRUE), "File installed\n");
4243 ok(delete_pf("msitest\\theta", TRUE), "File not installed\n");
4244 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4245 ok(!delete_pf("msitest\\epsilon", TRUE), "File installed\n");
4246 ok(delete_pf("msitest\\zeta", TRUE), "File not installed\n");
4247 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4248 ok(!delete_pf("msitest\\eta", TRUE), "File installed\n");
4249 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4250 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4251 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4252 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4253
4254 r = MsiInstallProductA(msifile, "REMOVE=\"one,two,three,four\"");
4255 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4256 ok(!delete_pf("msitest\\alpha", TRUE), "File installed\n");
4257 ok(!delete_pf("msitest\\beta", TRUE), "File installed\n");
4258 ok(!delete_pf("msitest\\gamma", TRUE), "File installed\n");
4259 ok(!delete_pf("msitest\\theta", TRUE), "File installed\n");
4260 ok(!delete_pf("msitest\\delta", TRUE), "File installed\n");
4261 ok(!delete_pf("msitest\\epsilon", TRUE), "File installed\n");
4262 ok(!delete_pf("msitest\\zeta", TRUE), "File installed\n");
4263 ok(!delete_pf("msitest\\iota", TRUE), "File installed\n");
4264 ok(!delete_pf("msitest\\eta", TRUE), "File installed\n");
4265 ok(!delete_pf("msitest\\kappa", TRUE), "File installed\n");
4266 ok(!delete_pf("msitest\\lambda", TRUE), "File installed\n");
4267 ok(!delete_pf("msitest\\mu", TRUE), "File installed\n");
4268 ok(!delete_pf("msitest", FALSE), "Directory created\n");
4269
4270error:
4272 DeleteFileA("msitest\\alpha");
4273 DeleteFileA("msitest\\beta");
4274 DeleteFileA("msitest\\gamma");
4275 DeleteFileA("msitest\\theta");
4276 DeleteFileA("msitest\\delta");
4277 DeleteFileA("msitest\\epsilon");
4278 DeleteFileA("msitest\\zeta");
4279 DeleteFileA("msitest\\iota");
4280 DeleteFileA("msitest\\eta");
4281 DeleteFileA("msitest\\kappa");
4282 DeleteFileA("msitest\\lambda");
4283 DeleteFileA("msitest\\mu");
4284 RemoveDirectoryA("msitest");
4285}
static const msi_table is_tables[]
Definition: install.c:1788

Referenced by START_TEST().

◆ test_int_widths()

static void test_int_widths ( void  )
static

Definition at line 4880 of file install.c.

4881{
4882 static const char int0[] = "int0\ni0\nint0\tint0\n1";
4883 static const char int1[] = "int1\ni1\nint1\tint1\n1";
4884 static const char int2[] = "int2\ni2\nint2\tint2\n1";
4885 static const char int3[] = "int3\ni3\nint3\tint3\n1";
4886 static const char int4[] = "int4\ni4\nint4\tint4\n1";
4887 static const char int5[] = "int5\ni5\nint5\tint5\n1";
4888 static const char int8[] = "int8\ni8\nint8\tint8\n1";
4889 static const struct
4890 {
4891 const char *data;
4892 unsigned int size;
4893 UINT ret;
4894 }
4895 tests[] =
4896 {
4897 { int0, sizeof(int0) - 1, ERROR_SUCCESS },
4898 { int1, sizeof(int1) - 1, ERROR_SUCCESS },
4899 { int2, sizeof(int2) - 1, ERROR_SUCCESS },
4900 { int3, sizeof(int3) - 1, ERROR_FUNCTION_FAILED },
4901 { int4, sizeof(int4) - 1, ERROR_SUCCESS },
4902 { int5, sizeof(int5) - 1, ERROR_FUNCTION_FAILED },
4903 { int8, sizeof(int8) - 1, ERROR_FUNCTION_FAILED }
4904 };
4905 WCHAR tmpdir[MAX_PATH], msitable[MAX_PATH], msidb[MAX_PATH];
4906 MSIHANDLE db;
4907 UINT r, i;
4908
4911
4912 lstrcpyW(msitable, tmpdir);
4913 lstrcatW(msitable, L"\\msitable.idt");
4914
4915 lstrcpyW(msidb, tmpdir);
4916 lstrcatW(msidb, L"\\msitest.msi");
4917
4918 r = MsiOpenDatabaseW(msidb, MSIDBOPEN_CREATE, &db);
4919 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4920
4921 for (i = 0; i < ARRAY_SIZE(tests); i++)
4922 {
4923 DWORD count;
4924 HANDLE handle = CreateFileW(msitable, GENERIC_WRITE, 0, NULL,
4928
4929 r = MsiDatabaseImportW(db, tmpdir, L"msitable.idt");
4930 ok(r == tests[i].ret, " %u expected %u, got %u\n", i, tests[i].ret, r);
4931
4932 r = MsiDatabaseCommit(db);
4933 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4934 DeleteFileW(msitable);
4935 }
4936
4937 MsiCloseHandle(db);
4938 DeleteFileW(msidb);
4940}
#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:58
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:700
DWORD WINAPI GetTempPathW(IN DWORD count, OUT LPWSTR path)
Definition: path.c:2098
UINT WINAPI MsiDatabaseImportW(MSIHANDLE handle, const WCHAR *szFolder, const WCHAR *szFilename)
Definition: database.c:848
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:3203
static BYTE int5[]
Definition: cert.c:3207
static BYTE int4[]
Definition: cert.c:3206
static BYTE int2[]
Definition: cert.c:3204
const void * data
Definition: install.c:3662
static char tmpdir[MAX_PATH]
Definition: shlexec.c:52
#define ERROR_FUNCTION_FAILED
Definition: winerror.h:1333

Referenced by START_TEST().

◆ test_missingcab()

static void test_missingcab ( void  )
static

Definition at line 3967 of file install.c.

3968{
3969 UINT r;
3970
3971 if (!is_process_elevated())
3972 {
3973 skip("process is limited\n");
3974 return;
3975 }
3976
3977 CreateDirectoryA("msitest", NULL);
3978 create_file("msitest\\augustus", 500);
3979 create_file("maximus", 500);
3980 create_file("tiberius", 500);
3981
3983
3985
3986 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3987 create_cab_file("test4.cab", MEDIA_SIZE, "tiberius\0");
3988
3989 create_pf("msitest", FALSE);
3990 create_pf_data("msitest\\caesar", "abcdefgh", TRUE);
3991 create_pf_data("msitest\\tiberius", "abcdefgh", TRUE);
3992
3995 {
3996 skip("Not enough rights to perform tests\n");
3997 goto error;
3998 }
3999 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4000 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4001 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
4002 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
4003 ok(compare_pf_data("msitest\\tiberius", "abcdefgh", sizeof("abcdefgh")), "Wrong file contents\n");
4004 ok(delete_pf("msitest\\tiberius", TRUE), "File not installed\n");
4005 ok(!delete_pf("msitest\\gaius", TRUE), "File installed\n");
4006 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4007
4008 create_pf("msitest", FALSE);
4009 create_pf_data("msitest\\caesar", "abcdefgh", TRUE);
4010 create_pf_data("msitest\\tiberius", "abcdefgh", TRUE);
4011 create_pf("msitest\\gaius", TRUE);
4012
4013 r = MsiInstallProductA(msifile, "GAIUS=1");
4014 ok(r == ERROR_INSTALL_FAILURE, "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4015 todo_wine
4016 {
4017 ok(!delete_pf("msitest\\maximus", TRUE), "File installed\n");
4018 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
4019 }
4020 ok(delete_pf("msitest\\caesar", TRUE), "File removed\n");
4021 ok(compare_pf_data("msitest\\tiberius", "abcdefgh", sizeof("abcdefgh")), "Wrong file contents\n");
4022 ok(delete_pf("msitest\\tiberius", TRUE), "File removed\n");
4023 ok(delete_pf("msitest\\gaius", TRUE), "File removed\n");
4024 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4025
4026error:
4027 delete_pf("msitest", FALSE);
4028 DeleteFileA("msitest\\augustus");
4029 RemoveDirectoryA("msitest");
4030 DeleteFileA("maximus");
4031 DeleteFileA("tiberius");
4032 DeleteFileA("test1.cab");
4033 DeleteFileA("test4.cab");
4035}
#define create_pf(file, is_file)
Definition: install.c:3965
static const msi_table mc_tables[]
Definition: install.c:1734
void create_pf_data(LPCSTR file, LPCSTR data, BOOL is_file)
Definition: install.c:3951
static BOOL compare_pf_data(const char *filename, const char *data, DWORD size)
Definition: install.c:2475

Referenced by START_TEST().

◆ test_missingcomponent()

static void test_missingcomponent ( void  )
static

Definition at line 4659 of file install.c.

4660{
4661 UINT r;
4662
4663 if (!is_process_elevated())
4664 {
4665 skip("process is limited\n");
4666 return;
4667 }
4668
4669 CreateDirectoryA("msitest", NULL);
4670 create_file("msitest\\hydrogen", 500);
4671 create_file("msitest\\helium", 500);
4672 create_file("msitest\\lithium", 500);
4673 create_file("beryllium", 500);
4674
4676
4678
4679 r = MsiInstallProductA(msifile, "INSTALLLEVEL=10 PROPVAR=42");
4681 {
4682 skip("Not enough rights to perform tests\n");
4683 goto error;
4684 }
4685 else if (r == ERROR_INSTALL_FAILURE)
4686 {
4687 win_skip("broken result\n");
4688 goto error;
4689 }
4690 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4691 ok(pf_exists("msitest\\hydrogen"), "File not installed\n");
4692 ok(pf_exists("msitest\\helium"), "File not installed\n");
4693 ok(pf_exists("msitest\\lithium"), "File not installed\n");
4694 ok(!pf_exists("msitest\\beryllium"), "File installed\n");
4695 ok(pf_exists("msitest"), "File not installed\n");
4696
4697 r = MsiInstallProductA(msifile, "REMOVE=ALL INSTALLLEVEL=10 PROPVAR=42");
4698 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4699 ok(!delete_pf("msitest\\hydrogen", TRUE), "File not removed\n");
4700 ok(!delete_pf("msitest\\helium", TRUE), "File not removed\n");
4701 ok(!delete_pf("msitest\\lithium", TRUE), "File not removed\n");
4702 ok(!pf_exists("msitest\\beryllium"), "File installed\n");
4703 ok(!delete_pf("msitest", FALSE), "Directory not removed\n");
4704
4705error:
4707 DeleteFileA("msitest\\hydrogen");
4708 DeleteFileA("msitest\\helium");
4709 DeleteFileA("msitest\\lithium");
4710 DeleteFileA("beryllium");
4711 RemoveDirectoryA("msitest");
4712}
#define win_skip
Definition: minitest.h:67
static const msi_table mcp_tables[]
Definition: install.c:1812

Referenced by START_TEST().

◆ test_mixed_package()

static void test_mixed_package ( void  )
static

Definition at line 5872 of file install.c.

5873{
5874 UINT r;
5875 LONG res;
5876 HKEY hkey;
5877 char value[MAX_PATH];
5878 DWORD size;
5879
5880 if (!is_process_elevated())
5881 {
5882 skip("process is limited\n");
5883 return;
5884 }
5885 if (!is_wow64 && !is_64bit)
5886 {
5887 skip("this test must be run on 64-bit\n");
5888 return;
5889 }
5892
5895 {
5896 skip("Not enough rights to perform tests\n");
5897 goto error;
5898 }
5899 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5900
5901 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
5902 ok(!res, "can't open 32-bit component key, got %ld\n", res);
5903 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5904 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5905 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5906 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5907 RegCloseKey(hkey);
5908
5909 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
5910 ok(!res, "can't open 64-bit component key, got %ld\n", res);
5911 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5912 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5913 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5914 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5915 RegCloseKey(hkey);
5916
5918 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5920 ok(res == ERROR_SUCCESS, "can't open 32-bit CLSID key, got %ld\n", res);
5921 if (res == ERROR_SUCCESS) {
5922 size = sizeof(value);
5923 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5924 ok(!strcmp(value, "winetest32.dll"), "got %s\n", value);
5925 RegCloseKey(hkey);
5926 }
5927
5929 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5931 ok(res == ERROR_SUCCESS, "can't open 64-bit CLSID key, got %ld\n", res);
5932 if (res == ERROR_SUCCESS) {
5933 size = sizeof(value);
5934 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5935 ok(!strcmp(value, "winetest64.dll"), "got %s\n", value);
5936 RegCloseKey(hkey);
5937 }
5938
5939 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5940 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5941
5942 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
5943 ok(res == ERROR_FILE_NOT_FOUND, "32-bit component key not removed\n");
5944
5945 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
5946 ok(res == ERROR_FILE_NOT_FOUND, "64-bit component key not removed\n");
5947
5949 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
5951 ok(res == ERROR_FILE_NOT_FOUND, "32-bit CLSID key not removed\n");
5952
5954 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
5956 ok(res == ERROR_FILE_NOT_FOUND, "64-bit CLSID key not removed\n");
5957
5960
5962 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5963
5964 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
5965 ok(!res, "can't open 32-bit component key, got %ld\n", res);
5966 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5967 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5968 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5969 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5970 RegCloseKey(hkey);
5971
5972 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
5973 ok(!res, "can't open 64-bit component key, got %ld\n", res);
5974 res = RegQueryValueExA(hkey, "test1", NULL, NULL, NULL, NULL);
5975 ok(res, "expected RegQueryValueEx to fail, got %ld\n", res);
5976 res = RegQueryValueExA(hkey, "test2", NULL, NULL, NULL, NULL);
5977 ok(!res, "expected RegQueryValueEx to succeed, got %ld\n", res);
5978 RegCloseKey(hkey);
5979
5981 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5983 ok(res == ERROR_SUCCESS, "can't open 32-bit CLSID key, got %ld\n", res);
5984 if (res == ERROR_SUCCESS) {
5985 size = sizeof(value);
5986 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5987 ok(!strcmp(value, "winetest32.dll"), "got %s\n", value);
5988 RegCloseKey(hkey);
5989 }
5990
5992 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}\\InProcServer32",
5994 ok(res == ERROR_SUCCESS, "can't open 64-bit CLSID key, got %ld\n", res);
5995 if (res == ERROR_SUCCESS) {
5996 size = sizeof(value);
5997 res = RegQueryValueExA(hkey, "", NULL, NULL, (LPBYTE)value, &size);
5998 ok(!strcmp(value, "winetest64.dll"), "got %s\n", value);
5999 RegCloseKey(hkey);
6000 }
6001
6002 r = MsiInstallProductA(msifile, "REMOVE=ALL");
6003 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
6004
6005 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_32KEY, &hkey);
6006 ok(res == ERROR_FILE_NOT_FOUND, "32-bit component key not removed\n");
6007
6008 res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wine\\msitest", 0, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
6009 ok(res == ERROR_FILE_NOT_FOUND, "64-bit component key not removed\n");
6010
6012 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
6014 ok(res == ERROR_FILE_NOT_FOUND, "32-bit CLSID key not removed\n");
6015
6017 "CLSID\\{8dfef911-6885-41eb-b280-8f0304728e8b}",
6019 ok(res == ERROR_FILE_NOT_FOUND, "64-bit CLSID key not removed\n");
6020
6021error:
6023}
static const BOOL is_64bit
Definition: install.c:40
static const msi_table mixed_tables[]
Definition: install.c:1999
#define create_database_template(name, tables, num_tables, version, template)
Definition: utils.h:46
Definition: pdh_main.c:64
#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 3214 of file install.c.

3215{
3216 UINT r;
3217
3218 if (!is_process_elevated())
3219 {
3220 skip("process is limited\n");
3221 return;
3222 }
3223
3224 CreateDirectoryA("msitest", NULL);
3225 create_file("msitest\\maximus", 500);
3226 create_file("msitest\\augustus", 500);
3227 create_file("caesar", 500);
3228
3230
3232
3233 create_cab_file("test1.cab", MEDIA_SIZE, "caesar\0");
3234
3237 {
3238 skip("Not enough rights to perform tests\n");
3239 goto error;
3240 }
3241 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3242 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3243 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3244 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3245 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3246
3247error:
3248 /* Delete the files in the temp (current) folder */
3249 DeleteFileA("msitest\\maximus");
3250 DeleteFileA("msitest\\augustus");
3251 RemoveDirectoryA("msitest");
3252 DeleteFileA("caesar");
3253 DeleteFileA("test1.cab");
3255}
static const msi_table mm_tables[]
Definition: install.c:1597

Referenced by START_TEST().

◆ test_MsiInstallProduct()

static void test_MsiInstallProduct ( void  )
static

Definition at line 2671 of file install.c.

2672{
2673 UINT r;
2675 LONG res;
2676 HKEY hkey;
2677 DWORD num, size, type;
2679
2680 if (!is_process_elevated())
2681 {
2682 skip("process is limited\n");
2683 return;
2684 }
2685
2686 if (is_wow64)
2688
2690
2691 if (0) /* crashes on Win10 1709 */
2692 {
2693 r = MsiInstallProductA(NULL, "INSTALL=ALL");
2694 ok(r == ERROR_INVALID_PARAMETER, "got %u\n", r);
2695
2697 ok(r == ERROR_INVALID_PARAMETER, "got %u\n", r);
2698 }
2699
2700 /* szPackagePath is empty */
2701 r = MsiInstallProductA("", "INSTALL=ALL");
2703 "Expected ERROR_PATH_NOT_FOUND, got %d\n", r);
2704
2707
2708 /* install, don't publish */
2711 {
2712 skip("Not enough rights to perform tests\n");
2713 goto error;
2714 }
2715 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2716
2718
2719 res = RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", 0, access, &hkey);
2720 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2721
2722 size = MAX_PATH;
2723 type = REG_SZ;
2724 res = RegQueryValueExA(hkey, "Name", NULL, &type, (LPBYTE)path, &size);
2725 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2726 ok(!lstrcmpA(path, "imaname"), "Expected imaname, got %s\n", path);
2727
2728 size = MAX_PATH;
2729 type = REG_SZ;
2730 res = RegQueryValueExA(hkey, "blah", NULL, &type, (LPBYTE)path, &size);
2731 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2732
2733 size = sizeof(num);
2734 type = REG_DWORD;
2735 res = RegQueryValueExA(hkey, "number", NULL, &type, (LPBYTE)&num, &size);
2736 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2737 ok(num == 314, "Expected 314, got %lu\n", num);
2738
2739 size = MAX_PATH;
2740 type = REG_SZ;
2741 res = RegQueryValueExA(hkey, "OrderTestName", NULL, &type, (LPBYTE)path, &size);
2742 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2743 ok(!lstrcmpA(path, "OrderTestValue"), "Expected OrderTestValue, got %s\n", path);
2744
2745 RegDeleteKeyExA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", access, 0);
2746
2747 /* not published, reinstall */
2749 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2750
2752
2753 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2754 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2755 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2756
2758
2759 /* not published, RemovePreviousVersions set */
2761 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2762
2764
2765 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2766 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2767 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2768
2770
2771 /* not published, version number bumped */
2773 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2774
2776
2777 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2778 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2779 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2780
2782
2783 /* not published, RemovePreviousVersions set and version number bumped */
2785 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2786
2788
2789 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2790 ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n", res);
2791 RegDeleteKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest");
2792
2794
2795 /* install, publish product */
2796 r = MsiInstallProductA(msifile, "PUBLISH_PRODUCT=1");
2797 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2798
2800
2801 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2802 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2803
2805
2806 /* published, reinstall */
2808 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2809
2811
2812 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2813 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2814
2816
2817 /* published product, RemovePreviousVersions set */
2819 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2820
2822
2823 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2824 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2825
2827
2828 /* published product, version number bumped */
2830 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2831
2833
2834 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2835 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2836
2838
2839 /* published product, RemovePreviousVersions set and version number bumped */
2841 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2842
2844
2845 res = RegOpenKeyA(HKEY_CURRENT_USER, "SOFTWARE\\Wine\\msitest", &hkey);
2846 ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %ld\n", res);
2847
2848 r = MsiInstallProductA(msifile, "REMOVE=ALL FULL=1");
2849 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2850
2851error:
2854}
#define REG_SZ
Definition: layer.c:22
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
Definition: reg.c:1224
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
GLuint GLuint num
Definition: glext.h:9618
static const msi_table up_tables[]
Definition: install.c:1446
static const msi_table up5_tables[]
Definition: install.c:1498
static const msi_table up2_tables[]
Definition: install.c:1459
static const msi_table up4_tables[]
Definition: install.c:1485
static const msi_table up7_tables[]
Definition: install.c:1524
static const msi_table up3_tables[]
Definition: install.c:1472
static const msi_table up6_tables[]
Definition: install.c:1511
#define REG_DWORD
Definition: sdbapi.c:615
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:228

Referenced by START_TEST().

◆ test_MsiSetComponentState()

static void test_MsiSetComponentState ( void  )
static

Definition at line 2856 of file install.c.

2857{
2858 INSTALLSTATE installed, action;
2859 MSIHANDLE package;
2860 char path[MAX_PATH];
2861 UINT r;
2862
2864
2866
2868 lstrcatA(path, "\\");
2870
2872
2873 r = MsiOpenPackageA(path, &package);
2875 {
2876 skip("Not enough rights to perform tests\n");
2877 goto error;
2878 }
2879 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2880
2881 r = MsiDoActionA(package, "CostInitialize");
2882 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2883
2884 r = MsiDoActionA(package, "FileCost");
2885 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2886
2887 r = MsiDoActionA(package, "CostFinalize");
2888 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2889
2890 r = MsiGetComponentStateA(package, "dangler", &installed, &action);
2891 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2892 ok(installed == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", installed);
2893 ok(action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
2894
2895 r = MsiSetComponentStateA(package, "dangler", INSTALLSTATE_SOURCE);
2896 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2897
2898 MsiCloseHandle(package);
2899
2900error:
2903}
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: combase.c:2842
UINT WINAPI MsiGetComponentStateA(MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE *piInstalled, INSTALLSTATE *piAction)
Definition: install.c:1398
UINT WINAPI MsiDoActionA(MSIHANDLE hInstall, LPCSTR szAction)
Definition: install.c:45
UINT WINAPI MsiSetComponentStateA(MSIHANDLE hInstall, LPCSTR szComponent, INSTALLSTATE iState)
Definition: install.c:1382
UINT WINAPI MsiOpenPackageA(LPCSTR szPackage, MSIHANDLE *phPackage)
Definition: package.c:1696
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:531
action
Definition: namespace.c:707
@ 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 5524 of file install.c.

5525{
5526 UINT r;
5527
5528 if (!is_process_elevated())
5529 {
5530 skip("process is limited\n");
5531 return;
5532 }
5533
5534 CreateDirectoryA("msitest", NULL);
5535 create_file("msitest\\maximus", 500);
5537
5539
5542 {
5543 skip("Not enough rights to perform tests\n");
5544 goto error;
5545 }
5546 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5547 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5548 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5549
5552
5554 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5555 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5556 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5557
5560
5562 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5563 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5564 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5565
5568
5570 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5571 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5572 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5573
5576
5578 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5579 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5580 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5581
5584
5586 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5587 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5588 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5589
5592
5594 todo_wine
5595 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5596
5599
5601 todo_wine
5602 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5603
5606
5608 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5609
5612
5614 ok(r == ERROR_INSTALL_LANGUAGE_UNSUPPORTED, "Expected ERROR_INSTALL_LANGUAGE_UNSUPPORTED, got %u\n", r);
5615
5618
5620 ok(r == ERROR_INSTALL_LANGUAGE_UNSUPPORTED, "Expected ERROR_INSTALL_LANGUAGE_UNSUPPORTED, got %u\n", r);
5621
5624
5626 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5627 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5628 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5629
5631 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 200, "Intel64,9999;1033");
5632
5634 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5635
5637 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 200, "Intel32,1033;1033");
5638
5640 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5641
5643 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 200, "Intel32,9999;1033");
5644
5646 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5647
5650
5652 ok(r == ERROR_INSTALL_LANGUAGE_UNSUPPORTED, "Expected ERROR_INSTALL_LANGUAGE_UNSUPPORTED, got %u\n", r);
5653 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5654 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5655
5657 {
5661 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5662 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5663 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5664
5668 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5669 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5670 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5671 }
5672
5675
5677 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5678 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5679 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5680
5681 if (is_64bit && !is_wow64)
5682 {
5685
5687 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5688 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5689 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5690
5693
5695 ok(r == ERROR_INSTALL_PACKAGE_INVALID, "Expected ERROR_INSTALL_PACKAGE_INVALID, got %u\n", r);
5696 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5697 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5698
5701
5703 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5704 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5705 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5706
5709
5711 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5712 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5713 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5714
5717
5719 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5720 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5721 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5722 }
5723 else if (is_wow64)
5724 {
5727
5729 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5730 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5731 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5732
5735
5737 ok(r == ERROR_INSTALL_PACKAGE_INVALID, "Expected ERROR_INSTALL_PACKAGE_INVALID, got %u\n", r);
5738 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5739 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5740
5743
5745 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5746 ok(delete_pf("msitest\\maximus", TRUE), "file exists\n");
5747 ok(delete_pf("msitest", FALSE), "directory exists\n");
5748
5751
5753 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5754 ok(delete_pf("msitest\\maximus", TRUE), "file exists\n");
5755 ok(delete_pf("msitest", FALSE), "directory exists\n");
5756
5759
5761 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5762 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5763 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5764 }
5765 else
5766 {
5769
5771 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5772 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5773 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5774
5775
5777 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 100, "Alpha,Beta,Intel;0");
5778
5780 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5781 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5782 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5783
5785 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 100, "Alpha,Beta,Intel;");
5786
5788 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5789 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5790 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5791
5793 create_database_template(msifile, pv_tables, ARRAY_SIZE(pv_tables), 100, "Alpha,Beta,Intel");
5794
5796 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5797 ok(delete_pf("msitest\\maximus", TRUE), "file does not exist\n");
5798 ok(delete_pf("msitest", FALSE), "directory does not exist\n");
5799
5802
5804 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5805 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5806 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5807
5810
5812 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5813 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5814 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5815
5818
5820 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5821 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5822 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5823
5826
5828 ok(r == ERROR_INSTALL_PLATFORM_UNSUPPORTED, "Expected ERROR_INSTALL_PLATFORM_UNSUPPORTED, got %u\n", r);
5829 ok(!delete_pf("msitest\\maximus", TRUE), "file exists\n");
5830 ok(!delete_pf("msitest", FALSE), "directory exists\n");
5831 }
5832
5833error:
5834 /* Delete the files in the temp (current) folder */
5836 DeleteFileA("msitest\\maximus");
5837 RemoveDirectoryA("msitest");
5838}
LANGID WINAPI GetSystemDefaultLangID(void)
Definition: locale.c:1199
static const msi_table pv_tables[]
Definition: install.c:1975
#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:1326
#define ERROR_INSTALL_PLATFORM_UNSUPPORTED
Definition: winerror.h:1339
#define ERROR_INSTALL_LANGUAGE_UNSUPPORTED
Definition: winerror.h:1329

Referenced by START_TEST().

◆ test_packagecoltypes()

static void test_packagecoltypes ( void  )
static

Definition at line 2905 of file install.c.

2906{
2907 MSIHANDLE hdb, view, rec;
2908 char path[MAX_PATH];
2910 LPCSTR query;
2911 UINT r, count;
2912
2914
2916
2918 lstrcatA(path, "\\");
2921
2923 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2924
2925 query = "SELECT * FROM `Media`";
2926 r = MsiDatabaseOpenViewA( hdb, query, &view );
2927 ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n");
2928
2931 ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n");
2932 ok(count == 6, "Expected 6, got %d\n", count);
2933 ok(check_record(rec, 1, "DiskId"), "wrong column label\n");
2934 ok(check_record(rec, 2, "LastSequence"), "wrong column label\n");
2935 ok(check_record(rec, 3, "DiskPrompt"), "wrong column label\n");
2936 ok(check_record(rec, 4, "Cabinet"), "wrong column label\n");
2937 ok(check_record(rec, 5, "VolumeLabel"), "wrong column label\n");
2938 ok(check_record(rec, 6, "Source"), "wrong column label\n");
2939 MsiCloseHandle(rec);
2940
2943 ok(r == ERROR_SUCCESS, "MsiViewGetColumnInfo failed\n");
2944 ok(count == 6, "Expected 6, got %d\n", count);
2945 ok(check_record(rec, 1, "i2"), "wrong column label\n");
2946 ok(check_record(rec, 2, "i4"), "wrong column label\n");
2947 ok(check_record(rec, 3, "L64"), "wrong column label\n");
2948 ok(check_record(rec, 4, "S255"), "wrong column label\n");
2949 ok(check_record(rec, 5, "S32"), "wrong column label\n");
2950 ok(check_record(rec, 6, "S72"), "wrong column label\n");
2951
2952 MsiCloseHandle(rec);
2954 MsiCloseHandle(hdb);
2956
2958}
#define check_record(rec,...)
Definition: db.c:63
UINT WINAPI MsiRecordGetFieldCount(MSIHANDLE handle)
Definition: record.c:113
static const WCHAR pathW[]
Definition: path.c:2368
UINT WINAPI MsiViewGetColumnInfo(MSIHANDLE hView, MSICOLINFO info, MSIHANDLE *hRec)
Definition: msiquery.c:637
@ 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 4990 of file install.c.

4991{
4992 UINT r;
4993
4994 if (!is_process_elevated())
4995 {
4996 skip("process is limited\n");
4997 return;
4998 }
4999
5002
5004
5005 r = MsiInstallProductA(msifile, "ADDLOCAL=One");
5007 {
5008 skip("Not enough rights to perform tests\n");
5009 goto error;
5010 }
5011 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5012
5013 ok(!delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File installed\n");
5014 ok(!delete_pf("msitest\\cabout\\new", FALSE), "Directory created\n");
5015 ok(!delete_pf("msitest\\cabout\\four.txt", TRUE), "File installed\n");
5016 ok(!delete_pf("msitest\\cabout", FALSE), "Directory created\n");
5017 ok(!delete_pf("msitest\\changed\\three.txt", TRUE), "File installed\n");
5018 ok(!delete_pf("msitest\\changed", FALSE), "Directory created\n");
5019 ok(!delete_pf("msitest\\first\\two.txt", TRUE), "File installed\n");
5020 ok(!delete_pf("msitest\\first", FALSE), "Directory created\n");
5021 ok(!delete_pf("msitest\\filename", TRUE), "File installed\n");
5022 ok(delete_pf("msitest\\one.txt", TRUE), "File not installed\n");
5023 ok(delete_pf("msitest", FALSE), "Directory not created\n");
5024
5026 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5027
5028 ok(delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
5029 ok(delete_pf("msitest\\cabout\\new", FALSE), "Directory not created\n");
5030 ok(delete_pf("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
5031 ok(delete_pf("msitest\\cabout", FALSE), "Directory not created\n");
5032 ok(delete_pf("msitest\\changed\\three.txt", TRUE), "File not installed\n");
5033 ok(delete_pf("msitest\\changed", FALSE), "Directory not created\n");
5034 ok(delete_pf("msitest\\first\\two.txt", TRUE), "File not installed\n");
5035 ok(delete_pf("msitest\\first", FALSE), "Directory not created\n");
5036 ok(delete_pf("msitest\\filename", TRUE), "File not installed\n");
5037 ok(!delete_pf("msitest\\one.txt", TRUE), "File installed\n");
5038 ok(delete_pf("msitest", FALSE), "Directory not created\n");
5039
5040error:
5043}
static const msi_table ps_tables[]
Definition: install.c:1433

Referenced by START_TEST().

◆ test_propcase()

static void test_propcase ( void  )
static

Definition at line 4837 of file install.c.

4838{
4839 UINT r;
4840
4841 if (!is_process_elevated())
4842 {
4843 skip("process is limited\n");
4844 return;
4845 }
4846
4847 CreateDirectoryA("msitest", NULL);
4848 create_file("msitest\\augustus", 500);
4849
4851
4853
4854 r = MsiInstallProductA(msifile, "MyProp=42");
4856 {
4857 skip("Not enough rights to perform tests\n");
4858 goto error;
4859 }
4860 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4861 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4862 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4863
4864 r = MsiInstallProductA(msifile, "Prop1=\"Copyright \"\"My Company\"\" 2015\" MyProp=42");
4865 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4866 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4867 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4868
4869 r = MsiInstallProductA(msifile, "Prop1=\"\"\"install.exe\"\" /Install\" MyProp=\"42\"");
4870 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4871 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
4872 ok(delete_pf("msitest", FALSE), "Directory not created\n");
4873
4874error:
4876 DeleteFileA("msitest\\augustus");
4877 RemoveDirectoryA("msitest");
4878}
static const msi_table pc_tables[]
Definition: install.c:1848

Referenced by START_TEST().

◆ test_readonlyfile()

static void test_readonlyfile ( void  )
static

Definition at line 3331 of file install.c.

3332{
3333 UINT r;
3334 DWORD size;
3335 HANDLE file;
3337
3338 if (!is_process_elevated())
3339 {
3340 skip("process is limited\n");
3341 return;
3342 }
3343
3344 CreateDirectoryA("msitest", NULL);
3345 create_file("msitest\\maximus", 500);
3347
3349
3351 lstrcatA(path, "\\msitest");
3353
3354 lstrcatA(path, "\\maximus");
3357
3358 WriteFile(file, "readonlyfile", strlen("readonlyfile"), &size, NULL);
3360
3363 {
3364 skip("Not enough rights to perform tests\n");
3365 goto error;
3366 }
3367 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3368 ok(file_matches(path), "Expected file to be overwritten\n");
3369 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3370 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3371
3372error:
3373 /* Delete the files in the temp (current) folder */
3374 DeleteFileA("msitest\\maximus");
3375 RemoveDirectoryA("msitest");
3377}
static BOOL file_matches(LPSTR path)
Definition: install.c:3316
static const msi_table rof_tables[]
Definition: install.c:1635
#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 3379 of file install.c.

3380{
3381 UINT r;
3382 DWORD size;
3383 HANDLE file;
3385 CHAR buf[16];
3386
3387 if (!is_process_elevated())
3388 {
3389 skip("process is limited\n");
3390 return;
3391 }
3392
3393 CreateDirectoryA("msitest", NULL);
3394 create_file("maximus", 500);
3395 create_cab_file("test1.cab", MEDIA_SIZE, "maximus\0");
3396 DeleteFileA("maximus");
3397
3399
3401
3403 lstrcatA(path, "\\msitest");
3405
3406 lstrcatA(path, "\\maximus");
3409
3410 WriteFile(file, "readonlyfile", strlen("readonlyfile"), &size, NULL);
3412
3415 {
3416 skip("Not enough rights to perform tests\n");
3417 goto error;
3418 }
3419 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3420
3421 memset( buf, 0, sizeof(buf) );
3424 {
3425 ReadFile(file, buf, sizeof(buf) - 1, &size, NULL);
3427 }
3428 ok(!memcmp( buf, "maximus", sizeof("maximus")-1 ), "Expected file to be overwritten, got '%s'\n", buf);
3429 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3430 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3431
3432error:
3433 /* Delete the files in the temp (current) folder */
3435 DeleteFileA("msitest\\maximus");
3436 RemoveDirectoryA("msitest");
3438}
static const msi_table rofc_tables[]
Definition: install.c:1647
#define memset(x, y, z)
Definition: compat.h:39

Referenced by START_TEST().

◆ test_remove_upgrade_code()

static void test_remove_upgrade_code ( void  )
static

Definition at line 6095 of file install.c.

6096{
6097 UINT r;
6098 LONG res;
6099 HKEY hkey;
6101 DWORD type, size;
6102 char buf[1];
6103
6104 if (!is_process_elevated())
6105 {
6106 skip( "process is limited\n" );
6107 return;
6108 }
6110
6113
6115
6116 r = MsiInstallProductA( msifile, "FULL=1" );
6117 ok(r == ERROR_SUCCESS, "got %u\n", r);
6118
6120 "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UpgradeCodes\\51AAE0C44620A5E4788506E91F249BD2",
6121 0, access, &hkey );
6122 ok( res == ERROR_SUCCESS, "got %ld\n", res );
6123
6124 type = 0xdeadbeef;
6125 buf[0] = 0x55;
6126 size = sizeof(buf);
6127 res = RegQueryValueExA( hkey, "94A88FD7F6998CE40A22FB59F6B9C2BB", NULL, &type, (BYTE *)buf, &size );
6128 ok( res == ERROR_SUCCESS, "got %ld\n", res );
6129 ok( type == REG_SZ, "got %lu\n", type );
6130 ok( size == 1, "got %lu\n", size );
6131 ok( !buf[0], "wrong data\n" );
6132 RegCloseKey( hkey );
6133
6134 r = MsiInstallProductA( msifile, "REMOVE=ALL" );
6135 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
6136
6138 "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UpgradeCodes\\51AAE0C44620A5E4788506E91F249BD2",
6139 0, access, &hkey );
6140 ok( res == ERROR_FILE_NOT_FOUND, "got %ld\n", res );
6141
6142 RemoveDirectoryA( "msitest" );
6144}
unsigned char BYTE
Definition: xxhash.c:193

Referenced by START_TEST().

◆ test_samesequence()

static void test_samesequence ( void  )
static

Definition at line 3257 of file install.c.

3258{
3259 UINT r;
3260
3263
3265
3267 if (r == ERROR_INSTALL_FAILURE)
3268 {
3269 win_skip("unprivileged user?\n");
3270 goto error;
3271 }
3272 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3273 if (r == ERROR_SUCCESS)
3274 {
3275 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3276 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3277 ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
3278 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3279 }
3280
3281error:
3284}
static const msi_table ss_tables[]
Definition: install.c:1609

Referenced by START_TEST().

◆ test_setdirproperty()

static void test_setdirproperty ( void  )
static

Definition at line 3440 of file install.c.

3441{
3442 UINT r;
3443
3444 if (!is_process_elevated())
3445 {
3446 skip("process is limited\n");
3447 return;
3448 }
3449
3450 CreateDirectoryA("msitest", NULL);
3451 create_file("msitest\\maximus", 500);
3453
3455
3458 {
3459 skip("Not enough rights to perform tests\n");
3460 goto error;
3461 }
3462 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3463 ok(delete_cf("msitest\\maximus", TRUE), "File not installed\n");
3464 ok(delete_cf("msitest", FALSE), "Directory not created\n");
3465
3466error:
3467 /* Delete the files in the temp (current) folder */
3469 DeleteFileA("msitest\\maximus");
3470 RemoveDirectoryA("msitest");
3471}
static BOOL delete_cf(const CHAR *rel_path, BOOL is_file)
Definition: install.c:2461
static const msi_table sdp_tables[]
Definition: install.c:1659

Referenced by START_TEST().

◆ test_shared_component()

static void test_shared_component ( void  )
static

Definition at line 6051 of file install.c.

6052{
6053 UINT r;
6054
6055 if (!is_process_elevated())
6056 {
6057 skip("process is limited\n");
6058 return;
6059 }
6060 CreateDirectoryA("msitest", NULL);
6061 create_file("msitest\\sharedcomponent.txt", 1000);
6063 100, 0, ";", "{A8826420-FD72-4E61-9E15-C1944CF4CBE1}");
6065 100, 0, ";", "{A8B50B30-0E8A-4ACD-B3CF-1A5DC58B2739}");
6066
6068
6070 ok(r == ERROR_SUCCESS, "got %u\n", r);
6071
6072 ok(pf_exists("msitest\\sharedcomponent.txt"), "file not installed\n");
6073
6075 ok(r == ERROR_SUCCESS, "got %u\n", r);
6076
6077 ok(pf_exists("msitest\\sharedcomponent.txt"), "file not installed\n");
6078
6079 r = MsiInstallProductA(msifile, "REMOVE=ALL");
6080 ok(r == ERROR_SUCCESS, "got %u\n", r);
6081
6082 ok(pf_exists("msitest\\sharedcomponent.txt"), "file removed\n");
6083
6084 r = MsiInstallProductA(msifile2, "REMOVE=ALL");
6085 ok(r == ERROR_SUCCESS, "got %u\n", r);
6086
6087 ok(!pf_exists("msitest\\sharedcomponent.txt"), "file not removed\n");
6088
6089 DeleteFileA("msitest\\sharedcomponent.txt");
6090 RemoveDirectoryA("msitest");
6093}
static const msi_table shc_tables[]
Definition: install.c:2024
static const msi_table shc2_tables[]
Definition: install.c:2037

Referenced by START_TEST().

◆ test_shortcut()

static void test_shortcut ( void  )
static

Definition at line 4942 of file install.c.

4943{
4944 UINT r;
4945 HRESULT hr;
4946
4947 if (!is_process_elevated())
4948 {
4949 skip("process is limited\n");
4950 return;
4951 }
4952
4955
4957
4960 {
4961 skip("Not enough rights to perform tests\n");
4962 goto error;
4963 }
4964 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4965
4967 ok(SUCCEEDED(hr), "CoInitialize failed %#lx\n", hr);
4968
4970 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4971
4973
4975 ok(SUCCEEDED(hr), "CoInitialize failed %#lx\n", hr);
4976
4978 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4979
4981
4982 while (!delete_pf("msitest\\Shortcut.lnk", TRUE) && GetLastError() == ERROR_SHARING_VIOLATION) Sleep(1000);
4984
4985error:
4988}
HRESULT WINAPI DECLSPEC_HOTPATCH CoInitializeEx(void *reserved, DWORD model)
Definition: combase.c:2803
#define SUCCEEDED(hr)
Definition: intsafe.h:50
static const msi_table sc_tables[]
Definition: install.c:1420
@ COINIT_APARTMENTTHREADED
Definition: objbase.h:279
@ COINIT_MULTITHREADED
Definition: objbase.h:280
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition: synch.c:726
#define ERROR_SHARING_VIOLATION
Definition: winerror.h:257

Referenced by START_TEST().

◆ test_source_resolution()

static void test_source_resolution ( void  )
static

Definition at line 6276 of file install.c.

6277{
6278 UINT r;
6279
6280 if (!is_process_elevated())
6281 {
6282 skip( "process is limited\n" );
6283 return;
6284 }
6285
6288
6290
6291 r = MsiInstallProductA(msifile, "RESOLVE_SOURCE=1");
6292 ok(r == ERROR_SUCCESS, "got %u\n", r);
6293
6294 r = MsiInstallProductA(msifile, "PROCESS_COMPONENTS=1");
6295 ok(r == ERROR_SUCCESS, "got %u\n", r);
6296
6297 r = MsiInstallProductA(msifile, "INSTALL_FILES=1");
6298 ok(r == ERROR_SUCCESS, "got %u\n", r);
6299
6303}
static const msi_table sr_tables[]
Definition: install.c:2089

Referenced by START_TEST().

◆ test_sourcedirprop()

static void test_sourcedirprop ( void  )
static

Definition at line 4714 of file install.c.

4715{
4716 UINT r;
4717 CHAR props[MAX_PATH + 18];
4718
4719 if (!is_process_elevated())
4720 {
4721 skip("process is limited\n");
4722 return;
4723 }
4724
4725 CreateDirectoryA("msitest", NULL);
4726 create_file("msitest\\augustus", 500);
4727
4729
4731
4734 {
4735 skip("Not enough rights to perform tests\n");
4736 goto error;
4737 }
4738 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4739 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
4740 ok(delete_pf("msitest", FALSE), "Directory created\n");
4741
4742 DeleteFileA("msitest\\augustus");
4743 RemoveDirectoryA("msitest");
4744
4745 CreateDirectoryA("altsource", NULL);
4746 CreateDirectoryA("altsource\\msitest", NULL);
4747 create_file("altsource\\msitest\\augustus", 500);
4748
4749 sprintf(props, "SRCDIR=%s\\altsource\\", CURR_DIR);
4750
4752 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
4753 ok(delete_pf("msitest\\augustus", TRUE), "File installed\n");
4754 ok(delete_pf("msitest", FALSE), "Directory created\n");
4755
4756 DeleteFileA("altsource\\msitest\\augustus");
4757 RemoveDirectoryA("altsource\\msitest");
4758 RemoveDirectoryA("altsource");
4759
4760error:
4761 DeleteFileA("msitest\\augustus");
4762 RemoveDirectoryA("msitest");
4764}
static const WCHAR props[]
Definition: wbemdisp.c:288

Referenced by START_TEST().

◆ test_sourcefolder()

static void test_sourcefolder ( void  )
static

Definition at line 4037 of file install.c.

4038{
4039 UINT r;
4040
4041 if (!is_process_elevated())
4042 {
4043 skip("process is limited\n");
4044 return;
4045 }
4046
4047 CreateDirectoryA("msitest", NULL);
4048 create_file("augustus", 500);
4049
4051
4053
4056 {
4057 skip("Not enough rights to perform tests\n");
4058 goto error;
4059 }
4061 "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4062 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
4063 todo_wine
4064 {
4065 ok(!delete_pf("msitest", FALSE), "Directory created\n");
4066 }
4067 RemoveDirectoryA("msitest");
4068
4071 "Expected ERROR_INSTALL_FAILURE, got %u\n", r);
4072 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
4073 todo_wine
4074 {
4075 ok(!delete_pf("msitest", FALSE), "Directory created\n");
4076 }
4077
4078error:
4080 DeleteFileA("augustus");
4081}
static const msi_table sf_tables[]
Definition: install.c:1747

Referenced by START_TEST().

◆ test_sourcepath()

static void test_sourcepath ( void  )
static

Definition at line 4578 of file install.c.

4579{
4580 UINT r, i;
4581
4583 {
4584 skip("Run in interactive mode to run source path tests.\n");
4585 return;
4586 }
4587
4589
4591
4592 for (i = 0; i < ARRAY_SIZE(spmap); i++)
4593 {
4594 if (spmap[i].sost)
4595 {
4596 CreateDirectoryA("shortone", NULL);
4597 CreateDirectoryA("shortone\\shorttwo", NULL);
4598 }
4599
4600 if (spmap[i].solt)
4601 {
4602 CreateDirectoryA("shortone", NULL);
4603 CreateDirectoryA("shortone\\longtwo", NULL);
4604 }
4605
4606 if (spmap[i].lost)
4607 {
4608 CreateDirectoryA("longone", NULL);
4609 CreateDirectoryA("longone\\shorttwo", NULL);
4610 }
4611
4612 if (spmap[i].lolt)
4613 {
4614 CreateDirectoryA("longone", NULL);
4615 CreateDirectoryA("longone\\longtwo", NULL);
4616 }
4617
4618 if (spmap[i].soste)
4619 create_file("shortone\\shorttwo\\augustus", 50);
4620 if (spmap[i].solte)
4621 create_file("shortone\\longtwo\\augustus", 100);
4622 if (spmap[i].loste)
4623 create_file("longone\\shorttwo\\augustus", 150);
4624 if (spmap[i].lolte)
4625 create_file("longone\\longtwo\\augustus", 200);
4626
4628 ok(r == spmap[i].err, "%d: Expected %d, got %d\n", i, spmap[i].err, r);
4629 ok(get_pf_file_size("msitest\\augustus") == spmap[i].size,
4630 "%u: Expected %lu, got %lu\n", i, spmap[i].size,
4631 get_pf_file_size("msitest\\augustus"));
4632
4633 if (r == ERROR_SUCCESS)
4634 {
4635 ok(delete_pf("msitest\\augustus", TRUE), "%d: File not installed\n", i);
4636 ok(delete_pf("msitest", FALSE), "%d: Directory not created\n", i);
4637 }
4638 else
4639 {
4640 ok(!delete_pf("msitest\\augustus", TRUE), "%d: File installed\n", i);
4641 todo_wine ok(!delete_pf("msitest", FALSE), "%d: Directory installed\n", i);
4642 }
4643
4644 DeleteFileA("shortone\\shorttwo\\augustus");
4645 DeleteFileA("shortone\\longtwo\\augustus");
4646 DeleteFileA("longone\\shorttwo\\augustus");
4647 DeleteFileA("longone\\longtwo\\augustus");
4648 RemoveDirectoryA("shortone\\shorttwo");
4649 RemoveDirectoryA("shortone\\longtwo");
4650 RemoveDirectoryA("longone\\shorttwo");
4651 RemoveDirectoryA("longone\\longtwo");
4652 RemoveDirectoryA("shortone");
4653 RemoveDirectoryA("longone");
4654 }
4655
4657}
int winetest_interactive
static DWORD get_pf_file_size(LPCSTR file)
Definition: install.c:4559
static const struct sourcepathmap spmap[256]
static const msi_table sp_tables[]
Definition: install.c:1800
#define err(...)

Referenced by START_TEST().

◆ test_transformprop()

static void test_transformprop ( void  )
static

Definition at line 3714 of file install.c.

3715{
3716 UINT r;
3717
3718 if (!is_process_elevated())
3719 {
3720 skip("process is limited\n");
3721 return;
3722 }
3723
3724 CreateDirectoryA("msitest", NULL);
3725 create_file("msitest\\augustus", 500);
3726
3728
3730
3733 {
3734 skip("Not enough rights to perform tests\n");
3735 goto error;
3736 }
3737 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3738 ok(!delete_pf("msitest\\augustus", TRUE), "File installed\n");
3739 ok(!delete_pf("msitest", FALSE), "Directory created\n");
3740
3741 if (0)
3743 else
3745
3746 r = MsiInstallProductA(msifile, "TRANSFORMS=winetest.mst");
3747 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3748 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3749 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3750
3751error:
3752 /* Delete the files in the temp (current) folder */
3756 DeleteFileA("msitest\\augustus");
3757 RemoveDirectoryA("msitest");
3758}
static const msi_table tp_tables[]
Definition: install.c:1684
static void generate_transform_manual(void)
Definition: install.c:3671
static void generate_transform(void)
Definition: install.c:3603

Referenced by START_TEST().

◆ test_uiLevelFlags()

static void test_uiLevelFlags ( void  )
static

Definition at line 3286 of file install.c.

3287{
3288 UINT r;
3289
3292
3294
3296 if (r == ERROR_INSTALL_FAILURE)
3297 {
3298 win_skip("unprivileged user?\n");
3299 goto error;
3300 }
3301
3302 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
3303 if (r == ERROR_SUCCESS)
3304 {
3305 ok(!delete_pf("msitest\\maximus", TRUE), "UI install occurred, but execute-only was requested.\n");
3306 ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
3307 ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
3308 ok(delete_pf("msitest", FALSE), "Directory not created\n");
3309 }
3310
3311error:
3314}
static const msi_table ui_tables[]
Definition: install.c:1621
@ INSTALLUILEVEL_SOURCERESONLY
Definition: msi.h:73

Referenced by START_TEST().

◆ test_upgrade_code()

static void test_upgrade_code ( void  )
static

Definition at line 5840 of file install.c.

5841{
5842 UINT r;
5843
5844 if (!is_process_elevated())
5845 {
5846 skip("process is limited\n");
5847 return;
5848 }
5849
5850 CreateDirectoryA("msitest", NULL);
5851 create_file("msitest\\upgradecode.txt", 1000);
5853
5855
5857 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5858
5859 ok(pf_exists("msitest\\upgradecode.txt"), "file not installed\n");
5860
5861 r = MsiInstallProductA(msifile, "REMOVE=ALL");
5862 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
5863
5864 ok(!delete_pf("msitest\\upgradecode.txt", TRUE), "file not removed\n");
5865 ok(!delete_pf("msitest", FALSE), "directory not removed\n");
5866
5867 DeleteFileA("msitest\\upgradecode.txt");
5868 RemoveDirectoryA("msitest");
5870}
static const msi_table uc_tables[]
Definition: install.c:1987

Referenced by START_TEST().

◆ test_volume_props()

static void test_volume_props ( void  )
static

Definition at line 6025 of file install.c.

6026{
6027 UINT r;
6028
6029 if (!is_process_elevated())
6030 {
6031 skip("process is limited\n");
6032 return;
6033 }
6034 CreateDirectoryA("msitest", NULL);
6035 create_file("msitest\\volumeprop.txt", 1000);
6037
6039
6041 ok(r == ERROR_SUCCESS, "got %u\n", r);
6042
6043 r = MsiInstallProductA(msifile, "REMOVE=ALL");
6044 ok(r == ERROR_SUCCESS, "got %u\n", r);
6045
6046 DeleteFileA("msitest\\volumeprop.txt");
6047 RemoveDirectoryA("msitest");
6049}
static const msi_table vp_tables[]
Definition: install.c:2011

Referenced by START_TEST().

◆ test_wow64()

static void test_wow64 ( void  )
static

Definition at line 6216 of file install.c.

6217{
6218 void *cookie;
6219 UINT r;
6220
6221 if (!is_wow64)
6222 {
6223 skip("test must be run on WoW64\n");
6224 return;
6225 }
6226
6227 if (!is_process_elevated())
6228 {
6229 skip("process is limited\n");
6230 return;
6231 }
6232
6237 {
6238 skip("Not enough rights to perform tests\n");
6239 goto error;
6240 }
6241
6243
6244 ok(!delete_pf("msitest\\cabout\\new\\five.txt", TRUE), "File installed\n");
6245 ok(!delete_pf("msitest\\cabout\\new", FALSE), "Directory created\n");
6246 ok(!delete_pf("msitest\\cabout\\four.txt", TRUE), "File installed\n");
6247 ok(!delete_pf("msitest\\cabout", FALSE), "Directory created\n");
6248 ok(!delete_pf("msitest\\changed\\three.txt", TRUE), "File installed\n");
6249 ok(!delete_pf("msitest\\changed", FALSE), "Directory created\n");
6250 ok(!delete_pf("msitest\\first\\two.txt", TRUE), "File installed\n");
6251 ok(!delete_pf("msitest\\first", FALSE), "Directory created\n");
6252 ok(!delete_pf("msitest\\one.txt", TRUE), "File installed\n");
6253 ok(!delete_pf("msitest\\filename", TRUE), "File installed\n");
6254 ok(!delete_pf("msitest", FALSE), "Directory created\n");
6255
6256 ok(delete_pf_native("msitest\\cabout\\new\\five.txt", TRUE), "File not installed\n");
6257 ok(delete_pf_native("msitest\\cabout\\new", FALSE), "Directory not created\n");
6258 ok(delete_pf_native("msitest\\cabout\\four.txt", TRUE), "File not installed\n");
6259 ok(delete_pf_native("msitest\\cabout", FALSE), "Directory not created\n");
6260 ok(delete_pf_native("msitest\\changed\\three.txt", TRUE), "File not installed\n");
6261 ok(delete_pf_native("msitest\\changed", FALSE), "Directory not created\n");
6262 ok(delete_pf_native("msitest\\first\\two.txt", TRUE), "File not installed\n");
6263 ok(delete_pf_native("msitest\\first", FALSE), "Directory not created\n");
6264 ok(delete_pf_native("msitest\\one.txt", TRUE), "File not installed\n");
6265 ok(delete_pf_native("msitest\\filename", TRUE), "File not installed\n");
6266 ok(delete_pf_native("msitest", FALSE), "Directory not created\n");
6267
6269
6270error:
6273}
BOOL WINAPI Wow64RevertWow64FsRedirection(IN PVOID OldValue)
Definition: utils.c:810
BOOL WINAPI Wow64DisableWow64FsRedirection(IN PVOID *OldValue)
Definition: utils.c:787
static BOOL delete_pf_native(const CHAR *rel_path, BOOL is_file)
Definition: install.c:2447
static const msi_table x64_tables[]
Definition: install.c:2077
Definition: cookie.c:34

Referenced by START_TEST().

◆ write_file()

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

Definition at line 2525 of file install.c.

2526{
2527 DWORD size;
2528
2531 WriteFile(hf, data, data_size, &size, NULL);
2532 CloseHandle(hf);
2533}

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 2535 of file install.c.

2537{
2538 MSIHANDLE summary;
2539 UINT r;
2540
2541 r = MsiGetSummaryInformationA(db, NULL, 5, &summary);
2542 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2543
2544 r = MsiSummaryInfoSetPropertyA(summary, PID_TEMPLATE, VT_LPSTR, 0, NULL, template);
2545 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2546
2547 r = MsiSummaryInfoSetPropertyA(summary, PID_REVNUMBER, VT_LPSTR, 0, NULL, packagecode);
2548 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2549
2551 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2552
2553 r = MsiSummaryInfoSetPropertyA(summary, PID_WORDCOUNT, VT_I4, wordcount, NULL, NULL);
2554 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2555
2556 r = MsiSummaryInfoSetPropertyA(summary, PID_TITLE, VT_LPSTR, 0, NULL, "MSITEST");
2557 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2558
2559 /* write the summary changes back to the stream */
2560 r = MsiSummaryInfoPersist(summary);
2561 ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
2562
2563 MsiCloseHandle(summary);
2564}
#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 576 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 566 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 571 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:156

Definition at line 1708 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 1386 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 1400 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 1393 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 1379 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 1836 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 832 of file install.c.

◆ ai_tables

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

Definition at line 1824 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 589 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 1722 of file install.c.

Referenced by test_adminprops().

◆ APP_DATA_DIR

char APP_DATA_DIR[MAX_PATH]

Definition at line 53 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 889 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 182 of file install.c.

◆ aup2_tables

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

Definition at line 1886 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 910 of file install.c.

◆ aup3_tables

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

Definition at line 1899 of file install.c.

Referenced by test_allusers_prop().

◆ aup4_tables

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

Definition at line 1912 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 931 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 868 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 160 of file install.c.

◆ aup_tables

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

Definition at line 1873 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 693 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 667 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 649 of file install.c.

◆ ca1_tables

const msi_table ca1_tables[]
static
Initial value:
=
{
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 1759 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 687 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 681 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 700 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 721 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 705 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 1775 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 316 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 342 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 1549 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 357 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 1561 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 309 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 328 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 323 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 335 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 350 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 1537 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 527 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 532 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 522 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 491 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 499 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 507 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 515 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 1672 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 378 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 1585 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 364 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 371 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 1573 of file install.c.

Referenced by test_caborder().

◆ COMMON_FILES_DIR

char COMMON_FILES_DIR[MAX_PATH]

Definition at line 52 of file install.c.

Referenced by delete_cf(), get_system_dirs(), and START_TEST().

◆ 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 60 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 230 of file install.c.

◆ CURR_DIR

char CURR_DIR[MAX_PATH]

Definition at line 49 of file install.c.

◆ customdll

const char* customdll
static

Definition at line 56 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 561 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 1696 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 1323 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 1331 of file install.c.

◆ da_tables

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

Definition at line 2064 of file install.c.

Referenced by test_deferred_action().

◆ data

Definition at line 3662 of file install.c.

Referenced by test_int_widths().

◆ data1

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

Definition at line 3646 of file install.c.

◆ data2

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

Definition at line 3649 of file install.c.

◆ data3

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

Definition at line 3656 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 71 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 92 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 82 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 102 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 1925 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 1937 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 963 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 950 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 970 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 956 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 943 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 936 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 975 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 1949 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 1265 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 1288 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 1294 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 1281 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 1272 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 1259 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 1302 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 2050 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 1963 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 204 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 112 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 863 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 842 of file install.c.

◆ ip_tables

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

Definition at line 1860 of file install.c.

Referenced by test_installed_prop().

◆ is_64bit

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

Definition at line 40 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 736 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 752 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 728 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 768 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 784 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 1788 of file install.c.

Referenced by test_installstate().

◆ is_wow64

◆ 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 612 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 621 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 639 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 630 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 1734 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 803 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 817 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 810 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 824 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 1812 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 132 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 1056 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 1049 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 1042 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 1074 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 1063 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 1999 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 385 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 392 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 1597 of file install.c.

Referenced by test_mixedmedia().

◆ msifile

◆ msifile2

const char* msifile2 = "winetest2.msi"
static

Definition at line 43 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 47 of file install.c.

Referenced by generate_transform().

◆ msifileW

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

◆ mstfile

const char* mstfile = "winetest.mst"
static

◆ name

Definition at line 3661 of file install.c.

◆ name1

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

Definition at line 3641 of file install.c.

◆ name2

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

Definition at line 3642 of file install.c.

◆ name3

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

Definition at line 3643 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 1848 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 537 of file install.c.

◆ PROG_FILES_DIR

◆ PROG_FILES_DIR_NATIVE

char PROG_FILES_DIR_NATIVE[MAX_PATH]

Definition at line 51 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 138 of file install.c.

◆ ps_tables

const msi_table ps_tables[]
static
Initial value:

Definition at line 1433 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 479 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 1975 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 300 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 594 of file install.c.

◆ rename_ops

const char rename_ops[] = "PendingFileRenameOperations"
static

Definition at line 5157 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 423 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 434 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 428 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 440 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 445 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 1635 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 450 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 455 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 1647 of file install.c.

Referenced by test_readonlyfile_cab().

◆ sc_tables

const msi_table sc_tables[]
static
Initial value:

Definition at line 1420 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 474 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 460 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 1659 of file install.c.

Referenced by test_setdirproperty().

◆ session_manager

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

Definition at line 5156 of file install.c.

Referenced by add_boot_rename_entry(), 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 1747 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 1238 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 1175 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 2037 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 1203 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 1209 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 1197 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 1191 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 1185 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 1217 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 1165 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 2024 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 225 of file install.c.

◆ size

Definition at line 3663 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 789 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 794 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 1800 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 1372 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 1356 of file install.c.

◆ sr_tables

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

Definition at line 2089 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 397 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 1609 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:3646
static const WCHAR name3[]
Definition: install.c:3643
static const WCHAR name2[]
Definition: install.c:3642
static const WCHAR data2[]
Definition: install.c:3649
static const WCHAR data3[]
Definition: install.c:3656
static const WCHAR name1[]
Definition: install.c:3641
Definition: tftpd.h:126
Definition: tftpd.h:138

Referenced by generate_transform_manual().

◆ tables

const msi_table tables[]
static

◆ 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 556 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 1684 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 1009 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 1004 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 999 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 994 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 1024 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 1014 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 1987 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 405 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 418 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 412 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 1621 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 257 of file install.c.

◆ up2_tables

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

Definition at line 1459 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 278 of file install.c.

◆ up3_tables

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

Definition at line 1472 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up4_tables

const msi_table up4_tables[]
static
Initial value:

Definition at line 1485 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up5_tables

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

Definition at line 1498 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up6_tables

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

Definition at line 1511 of file install.c.

Referenced by test_MsiInstallProduct().

◆ up7_tables

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

Definition at line 1524 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 235 of file install.c.

◆ up_tables

const msi_table up_tables[]
static
Initial value:

Definition at line 1446 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 1111 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 1117 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 1105 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 1099 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 1093 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 1134 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 2011 of file install.c.

Referenced by test_volume_props().

◆ WINDOWS_DIR

char WINDOWS_DIR[MAX_PATH]

Definition at line 54 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 644 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 1344 of file install.c.

◆ x64_tables

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

Definition at line 2077 of file install.c.

Referenced by test_wow64().