46 if (!lang2 || lang2[0]==0)
52 return (lang1 != langdword);
54 return (lang1 == langdword);
64 while (*
p && *
p !=
'{')
p++;
65 if (*
p !=
'{')
return FALSE;
67 while (*
q && *
q !=
'}')
q++;
68 if (*
q !=
'}')
return FALSE;
73 while (*
p && *
p !=
';')
p++;
82 WCHAR *prop, *newprop;
140 LPCWSTR ver, language, action_property;
152 TRACE(
"product key not found\n");
169 TRACE(
"version below minimum\n");
188 TRACE(
"version above maximum\n");
199 TRACE(
"language doesn't match\n");
202 TRACE(
"found related product\n");
224 TRACE(
"Skipping FindRelatedProducts action: product already installed\n");
229 TRACE(
"Skipping FindRelatedProducts action: already done in UI sequence\n");
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
UINT msi_register_unique_action(MSIPACKAGE *package, const WCHAR *action)
BOOL msi_action_is_unique(const MSIPACKAGE *package, const WCHAR *action)
int msiobj_release(MSIOBJECTHDR *info)
#define check(expected, result)
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLdouble GLdouble q
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
@ INSTALLMESSAGE_ACTIONDATA
@ MSIINSTALLCONTEXT_MACHINE
@ MSIINSTALLCONTEXT_USERUNMANAGED
@ MSIINSTALLCONTEXT_USERMANAGED
static const WCHAR INSTALLPROPERTY_VERSIONW[]
static const WCHAR INSTALLPROPERTY_LANGUAGEW[]
@ msidbUpgradeAttributesVersionMaxInclusive
@ msidbUpgradeAttributesVersionMinInclusive
@ msidbUpgradeAttributesLanguagesExclusive
BOOL unsquash_guid(LPCWSTR in, LPWSTR out)
int MSI_RecordGetInteger(MSIRECORD *, UINT)
UINT MSIREG_OpenProductKey(LPCWSTR szProduct, LPCWSTR szUserSid, MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
void msi_reset_source_folders(MSIPACKAGE *package)
int msi_get_property_int(MSIDATABASE *package, LPCWSTR prop, int def)
UINT MSI_DatabaseOpenViewW(MSIDATABASE *, LPCWSTR, MSIQUERY **)
const WCHAR * MSI_RecordGetString(const MSIRECORD *, UINT)
UINT msi_set_property(MSIDATABASE *, const WCHAR *, const WCHAR *, int)
UINT MSIREG_OpenUpgradeCodesKey(LPCWSTR szProduct, HKEY *key, BOOL create)
WCHAR * msi_dup_property(MSIDATABASE *db, const WCHAR *prop)
INT MSI_ProcessMessage(MSIPACKAGE *, INSTALLMESSAGE, MSIRECORD *)
UINT MSI_RecordSetStringW(MSIRECORD *, UINT, LPCWSTR)
MSIRECORD * MSI_CreateRecord(UINT)
UINT MSI_IterateRecords(MSIQUERY *, LPDWORD, record_func, LPVOID)
#define SQUASHED_GUID_SIZE
DWORD msi_version_str_to_dword(LPCWSTR p)
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
UINT ACTION_FindRelatedProducts(MSIPACKAGE *package)
static UINT ITERATE_FindRelatedProducts(MSIRECORD *rec, LPVOID param)
static BOOL find_product(const WCHAR *list, const WCHAR *product)
static void append_productcode(MSIPACKAGE *package, const WCHAR *action_prop, const WCHAR *product)
static BOOL check_language(DWORD lang1, LPCWSTR lang2, DWORD attributes)