4 /* Print a debug message to the installer log file.
5 * To see the debug messages, install with
6 * msiexec /i pythonxy.msi /l*v python.log
8 static UINT
debug(MSIHANDLE hInstall
, LPCSTR msg
)
10 MSIHANDLE hRec
= MsiCreateRecord(1);
11 if (!hRec
|| MsiRecordSetStringA(hRec
, 1, msg
) != ERROR_SUCCESS
) {
12 return ERROR_INSTALL_FAILURE
;
14 MsiProcessMessage(hInstall
, INSTALLMESSAGE_INFO
, hRec
);
19 /* Check whether the TARGETDIR exists and is a directory.
20 * Set TargetExists appropriately.
22 UINT
__declspec(dllexport
) __stdcall
CheckDir(MSIHANDLE hInstall
)
32 result
= MsiGetPropertyW(hInstall
, L
"TARGETDIR", wpath
, &size
);
33 if (result
!= ERROR_SUCCESS
)
38 attributes
= GetFileAttributesW(wpath
);
39 if (attributes
== INVALID_FILE_ATTRIBUTES
||
40 !(attributes
& FILE_ATTRIBUTE_DIRECTORY
))
42 return MsiSetPropertyA(hInstall
, "TargetExists", "0");
44 return MsiSetPropertyA(hInstall
, "TargetExists", "1");
48 /* Update the state of the REGISTRY.tcl component according to the
49 * Extension and TclTk features. REGISTRY.tcl must be installed
50 * if both features are installed, and must be absent otherwise.
52 UINT
__declspec(dllexport
) __stdcall
UpdateEditIDLE(MSIHANDLE hInstall
)
54 INSTALLSTATE ext_old
, ext_new
, tcl_old
, tcl_new
, reg_new
;
57 result
= MsiGetFeatureStateA(hInstall
, "Extensions", &ext_old
, &ext_new
);
58 if (result
!= ERROR_SUCCESS
)
60 result
= MsiGetFeatureStateA(hInstall
, "TclTk", &tcl_old
, &tcl_new
);
61 if (result
!= ERROR_SUCCESS
)
64 /* If the current state is Absent, and the user did not select
65 the feature in the UI, Installer apparently sets the "selected"
66 state to unknown. Update it to the current value, then. */
67 if (ext_new
== INSTALLSTATE_UNKNOWN
)
69 if (tcl_new
== INSTALLSTATE_UNKNOWN
)
72 // XXX consider current state of REGISTRY.tcl?
73 if (((tcl_new
== INSTALLSTATE_LOCAL
) ||
74 (tcl_new
== INSTALLSTATE_SOURCE
) ||
75 (tcl_new
== INSTALLSTATE_DEFAULT
)) &&
76 ((ext_new
== INSTALLSTATE_LOCAL
) ||
77 (ext_new
== INSTALLSTATE_SOURCE
) ||
78 (ext_new
== INSTALLSTATE_DEFAULT
))) {
79 reg_new
= INSTALLSTATE_SOURCE
;
81 reg_new
= INSTALLSTATE_ABSENT
;
83 result
= MsiSetComponentStateA(hInstall
, "REGISTRY.tcl", reg_new
);
87 BOOL APIENTRY
DllMain(HANDLE hModule
,
88 DWORD ul_reason_for_call
,