Adds option to install launcher for all users even when installing Python just-for-me. This helps mitigate issues when the incompatible Python 3.4 launcher is installed.
Enables installer builds with the the text marker. Allows simple installs to include a custom description.
This commit is contained in:
parent
8cc80f1d81
commit
2237bdc595
Binary file not shown.
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 48 KiB |
|
@ -130,6 +130,9 @@ of available options is shown below.
|
||||||
+---------------------------+--------------------------------------+--------------------------+
|
+---------------------------+--------------------------------------+--------------------------+
|
||||||
| Include_launcher | Install :ref:`launcher`. | 1 |
|
| Include_launcher | Install :ref:`launcher`. | 1 |
|
||||||
+---------------------------+--------------------------------------+--------------------------+
|
+---------------------------+--------------------------------------+--------------------------+
|
||||||
|
| InstallLauncherAllUsers | Installs :ref:`launcher` for all | 1 |
|
||||||
|
| | users. | |
|
||||||
|
+---------------------------+--------------------------------------+--------------------------+
|
||||||
| Include_lib | Install standard library and | 1 |
|
| Include_lib | Install standard library and | 1 |
|
||||||
| | extension modules | |
|
| | extension modules | |
|
||||||
+---------------------------+--------------------------------------+--------------------------+
|
+---------------------------+--------------------------------------+--------------------------+
|
||||||
|
@ -145,6 +148,9 @@ of available options is shown below.
|
||||||
+---------------------------+--------------------------------------+--------------------------+
|
+---------------------------+--------------------------------------+--------------------------+
|
||||||
| SimpleInstall | Disable most install UI | 0 |
|
| SimpleInstall | Disable most install UI | 0 |
|
||||||
+---------------------------+--------------------------------------+--------------------------+
|
+---------------------------+--------------------------------------+--------------------------+
|
||||||
|
| SimpleInstallDescription | A custom message to display when the | (empty) |
|
||||||
|
| | simplified install UI is used. | |
|
||||||
|
+---------------------------+--------------------------------------+--------------------------+
|
||||||
|
|
||||||
For example, to silently install a default, system-wide Python installation,
|
For example, to silently install a default, system-wide Python installation,
|
||||||
you could use the following command (from an elevated command prompt)::
|
you could use the following command (from an elevated command prompt)::
|
||||||
|
@ -152,9 +158,11 @@ you could use the following command (from an elevated command prompt)::
|
||||||
python-3.5.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
|
python-3.5.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
|
||||||
|
|
||||||
To allow users to easily install a personal copy of Python without the test
|
To allow users to easily install a personal copy of Python without the test
|
||||||
suite, you could provide a shortcut with the following command::
|
suite, you could provide a shortcut with the following command. This will
|
||||||
|
display a simplified initial page and disallow customization::
|
||||||
|
|
||||||
python-3.5.0.exe /passive InstallAllUsers=0 Include_launcher=0 Include_test=0 SimpleInstall=1
|
python-3.5.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
|
||||||
|
SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."
|
||||||
|
|
||||||
(Note that omitting the launcher also omits file associations, and is only
|
(Note that omitting the launcher also omits file associations, and is only
|
||||||
recommended for per-user installs when there is also a system-wide installation
|
recommended for per-user installs when there is also a system-wide installation
|
||||||
|
|
|
@ -6,12 +6,14 @@ set PCBUILD=%D%..\..\PCBuild\
|
||||||
set BUILDX86=
|
set BUILDX86=
|
||||||
set BUILDX64=
|
set BUILDX64=
|
||||||
set BUILDDOC=
|
set BUILDDOC=
|
||||||
|
set BUILDPX=
|
||||||
|
|
||||||
:CheckOpts
|
:CheckOpts
|
||||||
if "%~1" EQU "-h" goto Help
|
if "%~1" EQU "-h" goto Help
|
||||||
if "%~1" EQU "-x86" (set BUILDX86=1) && shift && goto CheckOpts
|
if "%~1" EQU "-x86" (set BUILDX86=1) && shift && goto CheckOpts
|
||||||
if "%~1" EQU "-x64" (set BUILDX64=1) && shift && goto CheckOpts
|
if "%~1" EQU "-x64" (set BUILDX64=1) && shift && goto CheckOpts
|
||||||
if "%~1" EQU "--doc" (set BUILDDOC=1) && shift && goto CheckOpts
|
if "%~1" EQU "--doc" (set BUILDDOC=1) && shift && goto CheckOpts
|
||||||
|
if "%~1" EQU "--test-marker" (set BUILDPX=1) && shift && goto CheckOpts
|
||||||
|
|
||||||
if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX64=1)
|
if not defined BUILDX86 if not defined BUILDX64 (set BUILDX86=1) && (set BUILDX64=1)
|
||||||
|
|
||||||
|
@ -35,22 +37,28 @@ if defined BUILDDOC (
|
||||||
if errorlevel 1 goto :eof
|
if errorlevel 1 goto :eof
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set BUILD_CMD="%D%bundle\snapshot.wixproj"
|
||||||
|
if defined BUILDPX (
|
||||||
|
set BUILD_CMD=%BUILD_CMD% /p:UseTestMarker=true
|
||||||
|
)
|
||||||
|
|
||||||
if defined BUILDX86 (
|
if defined BUILDX86 (
|
||||||
"%PCBUILD%win32\python.exe" "%D%get_wix.py"
|
"%PCBUILD%win32\python.exe" "%D%get_wix.py"
|
||||||
msbuild "%D%bundle\snapshot.wixproj"
|
msbuild %BUILD_CMD%
|
||||||
if errorlevel 1 goto :eof
|
if errorlevel 1 goto :eof
|
||||||
)
|
)
|
||||||
if defined BUILDX64 (
|
if defined BUILDX64 (
|
||||||
"%PCBUILD%amd64\python.exe" "%D%get_wix.py"
|
"%PCBUILD%amd64\python.exe" "%D%get_wix.py"
|
||||||
msbuild "%D%bundle\snapshot.wixproj" /p:Platform=x64
|
msbuild /p:Platform=x64 %BUILD_CMD%
|
||||||
if errorlevel 1 goto :eof
|
if errorlevel 1 goto :eof
|
||||||
)
|
)
|
||||||
|
|
||||||
exit /B 0
|
exit /B 0
|
||||||
|
|
||||||
:Help
|
:Help
|
||||||
echo build.bat [-x86] [-x64] [--doc] [-h]
|
echo build.bat [-x86] [-x64] [--doc] [-h] [--test-marker]
|
||||||
echo.
|
echo.
|
||||||
echo -x86 Build x86 installers
|
echo -x86 Build x86 installers
|
||||||
echo -x64 Build x64 installers
|
echo -x64 Build x64 installers
|
||||||
echo --doc Build CHM documentation
|
echo --doc Build CHM documentation
|
||||||
|
echo --test-marker Build installers with 'x' markers
|
||||||
|
|
|
@ -21,10 +21,11 @@
|
||||||
|
|
||||||
<Text X="185" Y="50" Width="-11" Height="50" FontId="3" TabStop="yes">#(loc.InstallMessage)</Text>
|
<Text X="185" Y="50" Width="-11" Height="50" FontId="3" TabStop="yes">#(loc.InstallMessage)</Text>
|
||||||
|
|
||||||
<Button Name="InstallButton" X="175" Y="101" Width="-11" Height="129" TabStop="yes" FontId="3" HexStyle="0xE">#(loc.InstallButton)</Button>
|
<Button Name="InstallButton" X="175" Y="101" Width="-11" Height="109" TabStop="yes" FontId="3" HexStyle="0xE">#(loc.InstallButton)</Button>
|
||||||
<Button Name="InstallCustomButton" X="175" Y="241" Width="-11" Height="59" TabStop="yes" FontId="3" HexStyle="0xE">#(loc.InstallCustomButton)</Button>
|
<Button Name="InstallCustomButton" X="175" Y="221" Width="-11" Height="59" TabStop="yes" FontId="3" HexStyle="0xE">#(loc.InstallCustomButton)</Button>
|
||||||
|
|
||||||
<Checkbox Name="PrependPath" X="185" Y="-13" Width="-100" Height="20" TabStop="yes" FontId="3">#(loc.ShortPrependPathLabel)</Checkbox>
|
<Checkbox Name="PrependPath" X="185" Y="-13" Width="-100" Height="20" TabStop="yes" FontId="3">#(loc.ShortPrependPathLabel)</Checkbox>
|
||||||
|
<Checkbox Name="InstallLauncherAllUsers" X="185" Y="-33" Width="-100" Height="20" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.ShortInstallLauncherAllUsersLabel)</Checkbox>
|
||||||
|
|
||||||
<Button Name="InstallCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.CancelButton)</Button>
|
<Button Name="InstallCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.CancelButton)</Button>
|
||||||
</Page>
|
</Page>
|
||||||
|
@ -43,7 +44,7 @@
|
||||||
<Text X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.InstallHeader)</Text>
|
<Text X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.InstallHeader)</Text>
|
||||||
<Image X="0" Y="0" Width="162" Height="352" ImageFile="SideBar.png"/>
|
<Image X="0" Y="0" Width="162" Height="352" ImageFile="SideBar.png"/>
|
||||||
|
|
||||||
<Button Name="InstallSimpleButton" X="175" Y="101" Width="-11" Height="59" TabStop="yes" FontId="3" HideWhenDisabled="yes" HexStyle="0xF">#(loc.InstallSimpleButton)</Button>
|
<Button Name="InstallSimpleButton" X="175" Y="101" Width="-11" Height="129" TabStop="yes" FontId="3" HideWhenDisabled="yes" HexStyle="0xF">#(loc.InstallSimpleButton)</Button>
|
||||||
|
|
||||||
<Button Name="InstallCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.CancelButton)</Button>
|
<Button Name="InstallCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.CancelButton)</Button>
|
||||||
</Page>
|
</Page>
|
||||||
|
@ -63,7 +64,8 @@
|
||||||
<Checkbox Name="Include_test" X="185" Y="186" Width="-11" Height="20" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.Include_testLabel)</Checkbox>
|
<Checkbox Name="Include_test" X="185" Y="186" Width="-11" Height="20" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.Include_testLabel)</Checkbox>
|
||||||
<Text X="205" Y="206" Width="-11" Height="20" TabStop="no" FontId="5">#(loc.Include_testHelpLabel)</Text>
|
<Text X="205" Y="206" Width="-11" Height="20" TabStop="no" FontId="5">#(loc.Include_testHelpLabel)</Text>
|
||||||
|
|
||||||
<Checkbox Name="Include_launcher" X="185" Y="231" Width="-11" Height="20" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.Include_launcherLabel)</Checkbox>
|
<Checkbox Name="Include_launcher" X="185" Y="231" Width="100" Height="20" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.Include_launcherLabel)</Checkbox>
|
||||||
|
<Checkbox Name="CustomInstallLauncherAllUsers" X="285" Y="231" Width="-11" Height="20" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLauncherAllUsersLabel)</Checkbox>
|
||||||
<Text X="205" Y="251" Width="-11" Height="20" TabStop="no" FontId="5">#(loc.Include_launcherHelpLabel)</Text>
|
<Text X="205" Y="251" Width="-11" Height="20" TabStop="no" FontId="5">#(loc.Include_launcherHelpLabel)</Text>
|
||||||
|
|
||||||
<Button Name="Custom1BackButton" X="185" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.CustomBackButton)</Button>
|
<Button Name="Custom1BackButton" X="185" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.CustomBackButton)</Button>
|
||||||
|
|
|
@ -50,7 +50,9 @@ Creates shortcuts and file associations</String>
|
||||||
<String Id="InstallCustomButton">C&ustomize installation</String>
|
<String Id="InstallCustomButton">C&ustomize installation</String>
|
||||||
<String Id="InstallCustomButtonNote">Choose location and features</String>
|
<String Id="InstallCustomButtonNote">Choose location and features</String>
|
||||||
<String Id="InstallSimpleButton">&Install</String>
|
<String Id="InstallSimpleButton">&Install</String>
|
||||||
<String Id="InstallSimpleButtonNote">Uses setting preselected by your administrator</String>
|
<String Id="InstallSimpleButtonNote">Use settings preselected by your administrator
|
||||||
|
|
||||||
|
[SimpleInstallDescription]</String>
|
||||||
<String Id="InstallUpgradeButton">&Upgrade Now</String>
|
<String Id="InstallUpgradeButton">&Upgrade Now</String>
|
||||||
<String Id="InstallUpgradeButtonNote">[TargetDir]
|
<String Id="InstallUpgradeButtonNote">[TargetDir]
|
||||||
|
|
||||||
|
@ -81,7 +83,9 @@ Select Customize to review current options.</String>
|
||||||
<String Id="ShortcutsLabel">Create shortcuts for installed applications</String>
|
<String Id="ShortcutsLabel">Create shortcuts for installed applications</String>
|
||||||
<String Id="PrependPathLabel">Add Python to &environment variables</String>
|
<String Id="PrependPathLabel">Add Python to &environment variables</String>
|
||||||
<String Id="ShortPrependPathLabel">Add &Python [ShortVersion] to PATH</String>
|
<String Id="ShortPrependPathLabel">Add &Python [ShortVersion] to PATH</String>
|
||||||
<String Id="InstallAllUsersLabel">Install as &Administrator</String>
|
<String Id="InstallAllUsersLabel">Install for &all users</String>
|
||||||
|
<String Id="InstallLauncherAllUsersLabel">for &all users (requires elevation)</String>
|
||||||
|
<String Id="ShortInstallLauncherAllUsersLabel">Install &launcher for all users (recommended)</String>
|
||||||
<String Id="PrecompileLabel">&Precompile standard library</String>
|
<String Id="PrecompileLabel">&Precompile standard library</String>
|
||||||
<String Id="Include_symbolsLabel">Install debugging &symbols</String>
|
<String Id="Include_symbolsLabel">Install debugging &symbols</String>
|
||||||
<String Id="Include_debugLabel">Install debu&g binaries (requires VS 2015 or later)</String>
|
<String Id="Include_debugLabel">Install debu&g binaries (requires VS 2015 or later)</String>
|
||||||
|
|
|
@ -87,11 +87,13 @@ enum CONTROL_ID {
|
||||||
ID_INSTALL_UPGRADE_BUTTON,
|
ID_INSTALL_UPGRADE_BUTTON,
|
||||||
ID_INSTALL_UPGRADE_CUSTOM_BUTTON,
|
ID_INSTALL_UPGRADE_CUSTOM_BUTTON,
|
||||||
ID_INSTALL_CANCEL_BUTTON,
|
ID_INSTALL_CANCEL_BUTTON,
|
||||||
|
ID_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX,
|
||||||
|
|
||||||
// Customize Page
|
// Customize Page
|
||||||
ID_TARGETDIR_EDITBOX,
|
ID_TARGETDIR_EDITBOX,
|
||||||
ID_CUSTOM_ASSOCIATE_FILES_CHECKBOX,
|
ID_CUSTOM_ASSOCIATE_FILES_CHECKBOX,
|
||||||
ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX,
|
ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX,
|
||||||
|
ID_CUSTOM_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX,
|
||||||
ID_CUSTOM_COMPILE_ALL_CHECKBOX,
|
ID_CUSTOM_COMPILE_ALL_CHECKBOX,
|
||||||
ID_CUSTOM_BROWSE_BUTTON,
|
ID_CUSTOM_BROWSE_BUTTON,
|
||||||
ID_CUSTOM_BROWSE_BUTTON_LABEL,
|
ID_CUSTOM_BROWSE_BUTTON_LABEL,
|
||||||
|
@ -150,10 +152,12 @@ static THEME_ASSIGN_CONTROL_ID CONTROL_ID_NAMES[] = {
|
||||||
{ ID_INSTALL_UPGRADE_BUTTON, L"InstallUpgradeButton" },
|
{ ID_INSTALL_UPGRADE_BUTTON, L"InstallUpgradeButton" },
|
||||||
{ ID_INSTALL_UPGRADE_CUSTOM_BUTTON, L"InstallUpgradeCustomButton" },
|
{ ID_INSTALL_UPGRADE_CUSTOM_BUTTON, L"InstallUpgradeCustomButton" },
|
||||||
{ ID_INSTALL_CANCEL_BUTTON, L"InstallCancelButton" },
|
{ ID_INSTALL_CANCEL_BUTTON, L"InstallCancelButton" },
|
||||||
|
{ ID_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX, L"InstallLauncherAllUsers" },
|
||||||
|
|
||||||
{ ID_TARGETDIR_EDITBOX, L"TargetDir" },
|
{ ID_TARGETDIR_EDITBOX, L"TargetDir" },
|
||||||
{ ID_CUSTOM_ASSOCIATE_FILES_CHECKBOX, L"AssociateFiles" },
|
{ ID_CUSTOM_ASSOCIATE_FILES_CHECKBOX, L"AssociateFiles" },
|
||||||
{ ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX, L"InstallAllUsers" },
|
{ ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX, L"InstallAllUsers" },
|
||||||
|
{ ID_CUSTOM_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX, L"CustomInstallLauncherAllUsers" },
|
||||||
{ ID_CUSTOM_COMPILE_ALL_CHECKBOX, L"CompileAll" },
|
{ ID_CUSTOM_COMPILE_ALL_CHECKBOX, L"CompileAll" },
|
||||||
{ ID_CUSTOM_BROWSE_BUTTON, L"CustomBrowseButton" },
|
{ ID_CUSTOM_BROWSE_BUTTON, L"CustomBrowseButton" },
|
||||||
{ ID_CUSTOM_BROWSE_BUTTON_LABEL, L"CustomBrowseButtonLabel" },
|
{ ID_CUSTOM_BROWSE_BUTTON_LABEL, L"CustomBrowseButtonLabel" },
|
||||||
|
@ -261,10 +265,11 @@ class PythonBootstrapperApplication : public CBalBaseBootstrapperApplication {
|
||||||
LPWSTR defaultDir = nullptr;
|
LPWSTR defaultDir = nullptr;
|
||||||
LPWSTR targetDir = nullptr;
|
LPWSTR targetDir = nullptr;
|
||||||
LONGLONG elevated, crtInstalled, installAllUsers;
|
LONGLONG elevated, crtInstalled, installAllUsers;
|
||||||
BOOL checked;
|
BOOL checked, launcherChecked;
|
||||||
WCHAR wzPath[MAX_PATH] = { };
|
WCHAR wzPath[MAX_PATH] = { };
|
||||||
BROWSEINFOW browseInfo = { };
|
BROWSEINFOW browseInfo = { };
|
||||||
PIDLIST_ABSOLUTE pidl = nullptr;
|
PIDLIST_ABSOLUTE pidl = nullptr;
|
||||||
|
DWORD pageId;
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
switch(id) {
|
switch(id) {
|
||||||
|
@ -278,7 +283,7 @@ class PythonBootstrapperApplication : public CBalBaseBootstrapperApplication {
|
||||||
case ID_INSTALL_BUTTON:
|
case ID_INSTALL_BUTTON:
|
||||||
SavePageSettings();
|
SavePageSettings();
|
||||||
|
|
||||||
if (!QueryElevateForCrtInstall()) {
|
if (!WillElevate() && !QueryElevateForCrtInstall()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,18 +349,32 @@ class PythonBootstrapperApplication : public CBalBaseBootstrapperApplication {
|
||||||
ReleaseStr(targetDir);
|
ReleaseStr(targetDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
checked = ThemeIsControlChecked(_theme, ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX);
|
if (!WillElevate() && !QueryElevateForCrtInstall()) {
|
||||||
if (!checked && !QueryElevateForCrtInstall()) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
OnPlan(_command.action);
|
OnPlan(_command.action);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ID_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX:
|
||||||
|
checked = ThemeIsControlChecked(_theme, ID_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX);
|
||||||
|
_engine->SetVariableNumeric(L"InstallLauncherAllUsers", checked);
|
||||||
|
|
||||||
|
ThemeControlElevates(_theme, ID_INSTALL_BUTTON, WillElevate());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_CUSTOM_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX:
|
||||||
|
checked = ThemeIsControlChecked(_theme, ID_CUSTOM_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX);
|
||||||
|
_engine->SetVariableNumeric(L"InstallLauncherAllUsers", checked);
|
||||||
|
|
||||||
|
ThemeControlElevates(_theme, ID_CUSTOM_INSTALL_BUTTON, WillElevate());
|
||||||
|
break;
|
||||||
|
|
||||||
case ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX:
|
case ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX:
|
||||||
hr = BalGetNumericVariable(L"WixBundleElevated", &elevated);
|
|
||||||
checked = ThemeIsControlChecked(_theme, ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX);
|
checked = ThemeIsControlChecked(_theme, ID_CUSTOM_INSTALL_ALL_USERS_CHECKBOX);
|
||||||
ThemeControlElevates(_theme, ID_CUSTOM_INSTALL_BUTTON, checked && (FAILED(hr) || !elevated));
|
_engine->SetVariableNumeric(L"InstallAllUsers", checked);
|
||||||
|
|
||||||
|
ThemeControlElevates(_theme, ID_CUSTOM_INSTALL_BUTTON, WillElevate());
|
||||||
ThemeControlEnable(_theme, ID_CUSTOM_BROWSE_BUTTON_LABEL, !checked);
|
ThemeControlEnable(_theme, ID_CUSTOM_BROWSE_BUTTON_LABEL, !checked);
|
||||||
if (checked) {
|
if (checked) {
|
||||||
_engine->SetVariableNumeric(L"CompileAll", 1);
|
_engine->SetVariableNumeric(L"CompileAll", 1);
|
||||||
|
@ -416,6 +435,7 @@ class PythonBootstrapperApplication : public CBalBaseBootstrapperApplication {
|
||||||
case ID_MODIFY_BUTTON:
|
case ID_MODIFY_BUTTON:
|
||||||
// Some variables cannot be modified
|
// Some variables cannot be modified
|
||||||
_engine->SetVariableString(L"InstallAllUsersState", L"disable");
|
_engine->SetVariableString(L"InstallAllUsersState", L"disable");
|
||||||
|
_engine->SetVariableString(L"InstallLauncherAllUsersState", L"disable");
|
||||||
_engine->SetVariableString(L"TargetDirState", L"disable");
|
_engine->SetVariableString(L"TargetDirState", L"disable");
|
||||||
_engine->SetVariableString(L"CustomBrowseButtonState", L"disable");
|
_engine->SetVariableString(L"CustomBrowseButtonState", L"disable");
|
||||||
_modifying = TRUE;
|
_modifying = TRUE;
|
||||||
|
@ -437,35 +457,36 @@ class PythonBootstrapperApplication : public CBalBaseBootstrapperApplication {
|
||||||
|
|
||||||
void InstallPage_Show() {
|
void InstallPage_Show() {
|
||||||
// Ensure the All Users install button has a UAC shield
|
// Ensure the All Users install button has a UAC shield
|
||||||
LONGLONG elevated, installAll;
|
BOOL elevated = WillElevate();
|
||||||
|
ThemeControlElevates(_theme, ID_INSTALL_BUTTON, elevated);
|
||||||
if (FAILED(BalGetNumericVariable(L"WixBundleElevated", &elevated))) {
|
ThemeControlElevates(_theme, ID_INSTALL_SIMPLE_BUTTON, elevated);
|
||||||
elevated = 0;
|
ThemeControlElevates(_theme, ID_INSTALL_UPGRADE_BUTTON, elevated);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (SUCCEEDED(BalGetNumericVariable(L"InstallAllUsers", &installAll)) && installAll && !elevated) {
|
|
||||||
ThemeControlElevates(_theme, ID_INSTALL_BUTTON, TRUE);
|
|
||||||
ThemeControlElevates(_theme, ID_INSTALL_SIMPLE_BUTTON, TRUE);
|
|
||||||
ThemeControlElevates(_theme, ID_INSTALL_UPGRADE_BUTTON, TRUE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Custom1Page_Show() {
|
void Custom1Page_Show() {
|
||||||
|
LONGLONG installLauncherAllUsers;
|
||||||
|
|
||||||
|
if (FAILED(BalGetNumericVariable(L"InstallLauncherAllUsers", &installLauncherAllUsers))) {
|
||||||
|
installLauncherAllUsers = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ThemeSendControlMessage(_theme, ID_CUSTOM_INSTALL_LAUNCHER_ALL_USERS_CHECKBOX, BM_SETCHECK,
|
||||||
|
installLauncherAllUsers ? BST_CHECKED : BST_UNCHECKED, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Custom2Page_Show() {
|
void Custom2Page_Show() {
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
LONGLONG installAll, elevated, includeLauncher;
|
LONGLONG installAll, includeLauncher;
|
||||||
|
|
||||||
if (FAILED(BalGetNumericVariable(L"WixBundleElevated", &elevated))) {
|
if (FAILED(BalGetNumericVariable(L"InstallAllUsers", &installAll))) {
|
||||||
elevated = 0;
|
installAll = 0;
|
||||||
}
|
}
|
||||||
if (SUCCEEDED(BalGetNumericVariable(L"InstallAllUsers", &installAll))) {
|
|
||||||
ThemeControlElevates(_theme, ID_CUSTOM_INSTALL_BUTTON, installAll && !elevated);
|
if (WillElevate()) {
|
||||||
|
ThemeControlElevates(_theme, ID_CUSTOM_INSTALL_BUTTON, TRUE);
|
||||||
ThemeShowControl(_theme, ID_CUSTOM_BROWSE_BUTTON_LABEL, SW_HIDE);
|
ThemeShowControl(_theme, ID_CUSTOM_BROWSE_BUTTON_LABEL, SW_HIDE);
|
||||||
} else {
|
} else {
|
||||||
installAll = 0;
|
ThemeControlElevates(_theme, ID_CUSTOM_INSTALL_BUTTON, FALSE);
|
||||||
ThemeShowControl(_theme, ID_CUSTOM_BROWSE_BUTTON_LABEL, SW_SHOW);
|
ThemeShowControl(_theme, ID_CUSTOM_BROWSE_BUTTON_LABEL, SW_SHOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1839,8 +1860,8 @@ private:
|
||||||
COLORREF fg = fnt->crForeground, bg = fnt->crBackground;
|
COLORREF fg = fnt->crForeground, bg = fnt->crBackground;
|
||||||
*brush = fnt->hBackground;
|
*brush = fnt->hBackground;
|
||||||
RemapColor(&fg, &bg, brush);
|
RemapColor(&fg, &bg, brush);
|
||||||
SetTextColor(hDC, fg);
|
::SetTextColor(hDC, fg);
|
||||||
SetBkColor(hDC, bg);
|
::SetBkColor(hDC, bg);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -2080,6 +2101,7 @@ private:
|
||||||
|
|
||||||
for (DWORD i = 0; i < pPage->cControlIndices; ++i) {
|
for (DWORD i = 0; i < pPage->cControlIndices; ++i) {
|
||||||
THEME_CONTROL* pControl = _theme->rgControls + pPage->rgdwControlIndices[i];
|
THEME_CONTROL* pControl = _theme->rgControls + pPage->rgdwControlIndices[i];
|
||||||
|
BOOL enableControl = TRUE;
|
||||||
|
|
||||||
// If this is a named control, try to set its default state.
|
// If this is a named control, try to set its default state.
|
||||||
if (pControl->sczName && *pControl->sczName) {
|
if (pControl->sczName && *pControl->sczName) {
|
||||||
|
@ -2091,7 +2113,7 @@ private:
|
||||||
|
|
||||||
// If the control value isn't set then disable it.
|
// If the control value isn't set then disable it.
|
||||||
if (!SUCCEEDED(hr)) {
|
if (!SUCCEEDED(hr)) {
|
||||||
ThemeControlEnable(_theme, pControl->wId, FALSE);
|
enableControl = FALSE;
|
||||||
} else {
|
} else {
|
||||||
ThemeSendControlMessage(
|
ThemeSendControlMessage(
|
||||||
_theme,
|
_theme,
|
||||||
|
@ -2110,13 +2132,25 @@ private:
|
||||||
LPWSTR controlState = nullptr;
|
LPWSTR controlState = nullptr;
|
||||||
hr = BalGetStringVariable(controlName, &controlState);
|
hr = BalGetStringVariable(controlName, &controlState);
|
||||||
if (SUCCEEDED(hr) && controlState && *controlState) {
|
if (SUCCEEDED(hr) && controlState && *controlState) {
|
||||||
|
if (controlState[0] == '[') {
|
||||||
|
LPWSTR formatted = nullptr;
|
||||||
|
if (SUCCEEDED(BalFormatString(controlState, &formatted))) {
|
||||||
|
StrFree(controlState);
|
||||||
|
controlState = formatted;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, controlState, -1, L"disable", -1)) {
|
if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, controlState, -1, L"disable", -1)) {
|
||||||
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Disable control %ls", pControl->sczName);
|
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Disable control %ls", pControl->sczName);
|
||||||
ThemeControlEnable(_theme, pControl->wId, FALSE);
|
enableControl = FALSE;
|
||||||
} else if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, controlState, -1, L"hide", -1)) {
|
} else if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, controlState, -1, L"hide", -1)) {
|
||||||
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Hide control %ls", pControl->sczName);
|
BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "Hide control %ls", pControl->sczName);
|
||||||
// TODO: This doesn't work
|
// TODO: This doesn't work
|
||||||
ThemeShowControl(_theme, pControl->wId, SW_HIDE);
|
ThemeShowControl(_theme, pControl->wId, SW_HIDE);
|
||||||
|
} else {
|
||||||
|
// An explicit state can override the lack of a
|
||||||
|
// backing variable.
|
||||||
|
enableControl = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
StrFree(controlState);
|
StrFree(controlState);
|
||||||
|
@ -2124,6 +2158,8 @@ private:
|
||||||
StrFree(controlName);
|
StrFree(controlName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ThemeControlEnable(_theme, pControl->wId, enableControl);
|
||||||
|
|
||||||
// Format the text in each of the new page's controls
|
// Format the text in each of the new page's controls
|
||||||
if (pControl->sczText && *pControl->sczText) {
|
if (pControl->sczText && *pControl->sczText) {
|
||||||
// If the wix developer is showing a hidden variable
|
// If the wix developer is showing a hidden variable
|
||||||
|
@ -2405,6 +2441,16 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOL WillElevate() {
|
||||||
|
static BAL_CONDITION WILL_ELEVATE_CONDITION = {
|
||||||
|
L"not WixBundleElevated and (InstallAllUsers or (InstallLauncherAllUsers and Include_launcher))",
|
||||||
|
L""
|
||||||
|
};
|
||||||
|
BOOL result;
|
||||||
|
|
||||||
|
return SUCCEEDED(BalConditionEvaluate(&WILL_ELEVATE_CONDITION, _engine, &result, nullptr)) && result;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL IsCrtInstalled() {
|
BOOL IsCrtInstalled() {
|
||||||
if (_crtInstalledToken > 0) {
|
if (_crtInstalledToken > 0) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -88,7 +88,7 @@
|
||||||
|
|
||||||
<Target Name="BuildLauncher" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
|
<Target Name="BuildLauncher" BeforeTargets="BeforeBuild" Condition="'$(RebuildAll)' != 'false'">
|
||||||
<!-- Build the launcher MSI using Exec rather than MSBuild -->
|
<!-- Build the launcher MSI using Exec rather than MSBuild -->
|
||||||
<Exec Command='msbuild ..\launcher\launcher.wixproj /p:Platform=x86 /p:OutputPath="$(BuildPath.TrimEnd(`\`))" /p:OutputSuffix=$(Platform) /p:BuildForRelease=$(BuildForRelease)'
|
<Exec Command='msbuild ..\launcher\launcher.wixproj /p:Platform=x86 /p:OutputPath="$(BuildPath.TrimEnd(`\`))" /p:OutputSuffix=$(Platform) /p:BuildForRelease=$(BuildForRelease) /p:UseTestMarker=$(UseTestMarker)'
|
||||||
ContinueOnError="false" />
|
ContinueOnError="false" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
|
|
|
@ -24,15 +24,16 @@
|
||||||
<Variable Name="ShortVersionNoDot" Value="$(var.MajorVersionNumber)$(var.MinorVersionNumber)" />
|
<Variable Name="ShortVersionNoDot" Value="$(var.MajorVersionNumber)$(var.MinorVersionNumber)" />
|
||||||
|
|
||||||
<Variable Name="InstallAllUsers" Value="0" bal:Overridable="yes" />
|
<Variable Name="InstallAllUsers" Value="0" bal:Overridable="yes" />
|
||||||
|
<Variable Name="InstallLauncherAllUsers" Value="1" bal:Overridable="yes" />
|
||||||
<Variable Name="TargetDir" Value="" bal:Overridable="yes" />
|
<Variable Name="TargetDir" Value="" bal:Overridable="yes" />
|
||||||
<?if $(var.Platform)~="x64" ?>
|
<?if $(var.Platform)~="x64" ?>
|
||||||
<Variable Name="DefaultAllUsersTargetDir" Value="[ProgramFiles64Folder]Python [ShortVersion]" bal:Overridable="yes" />
|
<Variable Name="DefaultAllUsersTargetDir" Value="[ProgramFiles64Folder]$(var.TestPrefix)Python [ShortVersion]" bal:Overridable="yes" />
|
||||||
<Variable Name="TargetPlatform" Value="x64" />
|
<Variable Name="TargetPlatform" Value="x64" />
|
||||||
<?else ?>
|
<?else ?>
|
||||||
<Variable Name="DefaultAllUsersTargetDir" Value="[ProgramFilesFolder]Python [ShortVersion]" bal:Overridable="yes" />
|
<Variable Name="DefaultAllUsersTargetDir" Value="[ProgramFilesFolder]$(var.TestPrefix)Python [ShortVersion]" bal:Overridable="yes" />
|
||||||
<Variable Name="TargetPlatform" Value="x86" />
|
<Variable Name="TargetPlatform" Value="x86" />
|
||||||
<?endif ?>
|
<?endif ?>
|
||||||
<Variable Name="DefaultJustForMeTargetDir" Value="[LocalAppDataFolder]Programs\Python\Python[ShortVersionNoDot]$(var.Suffix32)" bal:Overridable="yes" />
|
<Variable Name="DefaultJustForMeTargetDir" Value="[LocalAppDataFolder]Programs\$(var.TestPrefix)Python\Python[ShortVersionNoDot]$(var.Suffix32)" bal:Overridable="yes" />
|
||||||
<Variable Name="OptionalFeaturesRegistryKey" Value="Software\$(var.TestPrefix)Python\PythonCore\[ShortVersion]$(var.Suffix32)\InstalledFeatures" />
|
<Variable Name="OptionalFeaturesRegistryKey" Value="Software\$(var.TestPrefix)Python\PythonCore\[ShortVersion]$(var.Suffix32)\InstalledFeatures" />
|
||||||
<Variable Name="TargetDirRegistryKey" Value="Software\$(var.TestPrefix)Python\PythonCore\[ShortVersion]$(var.Suffix32)\InstallPath" />
|
<Variable Name="TargetDirRegistryKey" Value="Software\$(var.TestPrefix)Python\PythonCore\[ShortVersion]$(var.Suffix32)\InstallPath" />
|
||||||
|
|
||||||
|
@ -45,6 +46,8 @@
|
||||||
<Variable Name="DefaultCustomTargetDir" Value="" bal:Overridable="yes" />
|
<Variable Name="DefaultCustomTargetDir" Value="" bal:Overridable="yes" />
|
||||||
|
|
||||||
<Variable Name="InstallAllUsersState" Value="enabled" />
|
<Variable Name="InstallAllUsersState" Value="enabled" />
|
||||||
|
<Variable Name="InstallLauncherAllUsersState" Value="enabled" bal:Overridable="yes" />
|
||||||
|
<Variable Name="CustomInstallLauncherAllUsersState" Value="[InstallLauncherAllUsersState]" />
|
||||||
<Variable Name="TargetDirState" Value="enabled" />
|
<Variable Name="TargetDirState" Value="enabled" />
|
||||||
<Variable Name="CustomBrowseButtonState" Value="enabled" />
|
<Variable Name="CustomBrowseButtonState" Value="enabled" />
|
||||||
|
|
||||||
|
@ -67,6 +70,7 @@
|
||||||
<Variable Name="CompileAll" Value="0" bal:Overridable="yes" />
|
<Variable Name="CompileAll" Value="0" bal:Overridable="yes" />
|
||||||
|
|
||||||
<Variable Name="SimpleInstall" Value="0" bal:Overridable="yes" />
|
<Variable Name="SimpleInstall" Value="0" bal:Overridable="yes" />
|
||||||
|
<Variable Name="SimpleInstallDescription" Value="" bal:Overridable="yes" />
|
||||||
|
|
||||||
<Chain ParallelCache="yes">
|
<Chain ParallelCache="yes">
|
||||||
<PackageGroupRef Id="crt" />
|
<PackageGroupRef Id="crt" />
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
DownloadUrl="$(var.DownloadUrl)"
|
DownloadUrl="$(var.DownloadUrl)"
|
||||||
ForcePerMachine="yes"
|
ForcePerMachine="yes"
|
||||||
EnableFeatureSelection="yes"
|
EnableFeatureSelection="yes"
|
||||||
InstallCondition="InstallAllUsers and Include_launcher" />
|
InstallCondition="(InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
||||||
|
|
||||||
<MsiPackage Id="launcher_JustForMe"
|
<MsiPackage Id="launcher_JustForMe"
|
||||||
SourceFile="launcher.msi"
|
SourceFile="launcher.msi"
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
DownloadUrl="$(var.DownloadUrl)"
|
DownloadUrl="$(var.DownloadUrl)"
|
||||||
ForcePerMachine="no"
|
ForcePerMachine="no"
|
||||||
EnableFeatureSelection="yes"
|
EnableFeatureSelection="yes"
|
||||||
InstallCondition="not InstallAllUsers and Include_launcher" />
|
InstallCondition="not (InstallAllUsers or InstallLauncherAllUsers) and Include_launcher" />
|
||||||
</PackageGroup>
|
</PackageGroup>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
</Wix>
|
</Wix>
|
|
@ -103,7 +103,7 @@
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<DirectoryRef Id="TARGETDIR">
|
<DirectoryRef Id="TARGETDIR">
|
||||||
<Directory Id="ProgramMenuFolder">
|
<Directory Id="ProgramMenuFolder">
|
||||||
<Directory Id="MenuDir" Name="!(loc.ProductName)" />
|
<Directory Id="MenuDir" Name="$(var.TestPrefix)!(loc.ProductName)" />
|
||||||
</Directory>
|
</Directory>
|
||||||
</DirectoryRef>
|
</DirectoryRef>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
|
|
|
@ -3,22 +3,22 @@
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<ComponentGroup Id="launcher_exe">
|
<ComponentGroup Id="launcher_exe">
|
||||||
<Component Id="py.exe" Directory="LauncherInstallDirectory" Guid="{B5107402-6958-461B-8B0A-4037D3327160}">
|
<Component Id="py.exe" Directory="LauncherInstallDirectory" Guid="{B5107402-6958-461B-8B0A-4037D3327160}">
|
||||||
<File Id="py.exe" Name="py.exe" Source="py.exe" KeyPath="yes" />
|
<File Id="py.exe" Name="py$(var.TestPrefix).exe" Source="py.exe" KeyPath="yes" />
|
||||||
<RegistryValue Root="HKMU" Key="Software\Python\PyLauncher" Value="[#py.exe]" Type="string" />
|
<RegistryValue Root="HKMU" Key="Software\Python\PyLauncher" Value="[#py.exe]" Type="string" />
|
||||||
</Component>
|
</Component>
|
||||||
<Component Id="pyw.exe" Directory="LauncherInstallDirectory" Guid="{8E52B8CD-48BB-4D74-84CD-6238BCD11F20}">
|
<Component Id="pyw.exe" Directory="LauncherInstallDirectory" Guid="{8E52B8CD-48BB-4D74-84CD-6238BCD11F20}">
|
||||||
<File Id="pyw.exe" Name="pyw.exe" Source="pyw.exe" KeyPath="yes" />
|
<File Id="pyw.exe" Name="pyw$(var.TestPrefix).exe" Source="pyw.exe" KeyPath="yes" />
|
||||||
</Component>
|
</Component>
|
||||||
|
|
||||||
<Component Id="launcher_path_cu" Directory="LauncherInstallDirectory" Guid="{95AEB930-367C-475C-A17E-A89BFCD4C670}">
|
<Component Id="launcher_path_cu" Directory="LauncherInstallDirectory" Guid="{95AEB930-367C-475C-A17E-A89BFCD4C670}">
|
||||||
<Condition>NOT ALLUSERS=1</Condition>
|
<Condition>NOT ALLUSERS=1</Condition>
|
||||||
|
|
||||||
<RegistryValue KeyPath="yes" Root="HKMU" Key="Software\Python\PyLauncher" Name="InstallDir" Value="[LauncherInstallDirectory]" Type="string" />
|
<RegistryValue KeyPath="yes" Root="HKMU" Key="Software\$(var.TestPrefix)Python\PyLauncher" Name="InstallDir" Value="[LauncherInstallDirectory]" Type="string" />
|
||||||
<Environment Id="PATH_CU" Action="set" Name="PATH" Part="first" Value="[LauncherInstallDirectory]" />
|
<Environment Id="PATH_CU" Action="set" Name="PATH" Part="first" Value="[LauncherInstallDirectory]" />
|
||||||
</Component>
|
</Component>
|
||||||
<Component Id="launcher_path_lm" Directory="LauncherInstallDirectory" Guid="{4A41C365-4E27-4D38-A6D1-4A01B4A6500C}">
|
<Component Id="launcher_path_lm" Directory="LauncherInstallDirectory" Guid="{4A41C365-4E27-4D38-A6D1-4A01B4A6500C}">
|
||||||
<Condition>ALLUSERS=1</Condition>
|
<Condition>ALLUSERS=1</Condition>
|
||||||
<RegistryValue KeyPath="yes" Root="HKMU" Key="Software\Python\PyLauncher" Name="InstallDir" Value="[LauncherInstallDirectory]" Type="string" />
|
<RegistryValue KeyPath="yes" Root="HKMU" Key="Software\$(var.TestPrefix)Python\PyLauncher" Name="InstallDir" Value="[LauncherInstallDirectory]" Type="string" />
|
||||||
</Component>
|
</Component>
|
||||||
</ComponentGroup>
|
</ComponentGroup>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<ComponentGroup Id="launcher_reg">
|
<ComponentGroup Id="launcher_reg">
|
||||||
<Component Id="file_association" Directory="LauncherInstallDirectory" Guid="{5AF84D9A-D820-456B-B230-6E0105A50276}">
|
<Component Id="file_association" Directory="LauncherInstallDirectory" Guid="{5AF84D9A-D820-456B-B230-6E0105A50276}">
|
||||||
<RegistryValue KeyPath="yes" Root="HKMU" Key="Software\Python\PyLauncher" Name="AssociateFiles" Value="1" Type="integer" />
|
<RegistryValue KeyPath="yes" Root="HKMU" Key="Software\$(var.TestPrefix)Python\PyLauncher" Name="AssociateFiles" Value="1" Type="integer" />
|
||||||
|
|
||||||
<ProgId Id="$(var.TestPrefix)Python.File" Description="!(loc.PythonFileDescription)" Advertise="no" Icon="py.exe" IconIndex="1">
|
<ProgId Id="$(var.TestPrefix)Python.File" Description="!(loc.PythonFileDescription)" Advertise="no" Icon="py.exe" IconIndex="1">
|
||||||
<Extension Id="$(var.FileExtension)" ContentType="text/plain">
|
<Extension Id="$(var.FileExtension)" ContentType="text/plain">
|
||||||
|
|
|
@ -81,10 +81,10 @@
|
||||||
<DefineConstants Condition="'$(CRTRedist)' != ''">
|
<DefineConstants Condition="'$(CRTRedist)' != ''">
|
||||||
$(DefineConstants);CRTRedist=$(CRTRedist);
|
$(DefineConstants);CRTRedist=$(CRTRedist);
|
||||||
</DefineConstants>
|
</DefineConstants>
|
||||||
<DefineConstants Condition="$(Configuration) != 'Debug'">
|
<DefineConstants Condition="$(UseTestMarker) != 'true'">
|
||||||
$(DefineConstants);TestPrefix=;FileExtension=py;
|
$(DefineConstants);TestPrefix=;FileExtension=py;
|
||||||
</DefineConstants>
|
</DefineConstants>
|
||||||
<DefineConstants Condition="$(Configuration) == 'Debug'">
|
<DefineConstants Condition="$(UseTestMarker) == 'true'">
|
||||||
$(DefineConstants);TestPrefix=x;FileExtension=px;
|
$(DefineConstants);TestPrefix=x;FileExtension=px;
|
||||||
</DefineConstants>
|
</DefineConstants>
|
||||||
<DefineConstants Condition="$(Platform) != 'x64'">
|
<DefineConstants Condition="$(Platform) != 'x64'">
|
||||||
|
|
Loading…
Reference in New Issue