Issue #25163: Display correct directory in installer when using non-default settings.

This commit is contained in:
Steve Dower 2015-10-11 15:37:22 -07:00
parent 5700ae877f
commit 731f4a2c5f
4 changed files with 41 additions and 24 deletions

View File

@ -308,6 +308,9 @@ Build
Windows
-------
- Issue #25163: Display correct directory in installer when using non-default
settings.
- Issue #25361: Disables use of SSE2 instructions in Windows 32-bit build
- Issue #25089: Adds logging to installer for case where launcher is not

View File

@ -24,8 +24,8 @@
<Button Name="InstallButton" X="185" Y="101" Width="-11" Height="109" TabStop="yes" FontId="3" HexStyle="0xE">#(loc.InstallButton)</Button>
<Button Name="InstallCustomButton" X="185" 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="24" TabStop="yes" FontId="3">#(loc.ShortPrependPathLabel)</Checkbox>
<Checkbox Name="InstallLauncherAllUsers" X="185" Y="-37" Width="-100" Height="24" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.ShortInstallLauncherAllUsersLabel)</Checkbox>
<Checkbox Name="PrependPath" X="185" Y="-13" Width="-100" Height="24" TabStop="yes" FontId="3">#(loc.ShortPrependPathLabel)</Checkbox>
<Button Name="InstallCancelButton" X="-11" Y="-11" Width="85" Height="27" TabStop="yes" FontId="0">#(loc.CancelButton)</Button>
</Page>

View File

@ -42,7 +42,7 @@ Continue?</String>
<String Id="InstallLicenseLinkText">[WixBundleName] &lt;a href="#"&gt;license terms&lt;/a&gt;.</String>
<String Id="InstallAcceptCheckbox">I &amp;agree to the license terms and conditions</String>
<String Id="InstallButton">&amp;Install Now</String>
<String Id="InstallButtonNote">[DefaultJustForMeTargetDir]
<String Id="InstallButtonNote">[TargetDir]
Includes IDLE, pip and documentation
Creates shortcuts and file associations</String>

View File

@ -293,28 +293,8 @@ class PythonBootstrapperApplication : public CBalBaseBootstrapperApplication {
hr = _engine->SetVariableNumeric(L"CompileAll", installAllUsers);
ExitOnFailure(hr, L"Failed to update CompileAll");
hr = BalGetStringVariable(L"TargetDir", &targetDir);
if (FAILED(hr) || !targetDir || !targetDir[0]) {
ReleaseStr(targetDir);
targetDir = nullptr;
hr = BalGetStringVariable(
installAllUsers ? L"DefaultAllUsersTargetDir" : L"DefaultJustForMeTargetDir",
&defaultDir
);
BalExitOnFailure(hr, "Failed to get the default install directory");
if (!defaultDir || !defaultDir[0]) {
BalLogError(E_INVALIDARG, "Default install directory is blank");
}
hr = BalFormatString(defaultDir, &targetDir);
BalExitOnFailure1(hr, "Failed to format '%ls'", defaultDir);
hr = _engine->SetVariableString(L"TargetDir", targetDir);
BalExitOnFailure(hr, "Failed to set install target directory");
}
ReleaseStr(targetDir);
hr = EnsureTargetDir();
ExitOnFailure(hr, L"Failed to set TargetDir");
OnPlan(BOOTSTRAPPER_ACTION_INSTALL);
break;
@ -2972,6 +2952,39 @@ private:
return;
}
HRESULT EnsureTargetDir() {
LONGLONG installAllUsers;
LPWSTR targetDir = nullptr, defaultDir = nullptr;
HRESULT hr = BalGetStringVariable(L"TargetDir", &targetDir);
if (FAILED(hr) || !targetDir || !targetDir[0]) {
ReleaseStr(targetDir);
targetDir = nullptr;
hr = BalGetNumericVariable(L"InstallAllUsers", &installAllUsers);
ExitOnFailure(hr, L"Failed to get install scope");
hr = BalGetStringVariable(
installAllUsers ? L"DefaultAllUsersTargetDir" : L"DefaultJustForMeTargetDir",
&defaultDir
);
BalExitOnFailure(hr, "Failed to get the default install directory");
if (!defaultDir || !defaultDir[0]) {
BalLogError(E_INVALIDARG, "Default install directory is blank");
}
hr = BalFormatString(defaultDir, &targetDir);
BalExitOnFailure1(hr, "Failed to format '%ls'", defaultDir);
hr = _engine->SetVariableString(L"TargetDir", targetDir);
BalExitOnFailure(hr, "Failed to set install target directory");
}
LExit:
ReleaseStr(defaultDir);
ReleaseStr(targetDir);
return hr;
}
public:
//
// Constructor - initialize member variables.
@ -3057,6 +3070,7 @@ public:
_baFunction = nullptr;
LoadOptionalFeatureStates(pEngine);
EnsureTargetDir();
}