зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1733284: Part 2: Re-launch Firefox with an App path when running in a package context r=mhowell,tkikuchi
Differential Revision: https://phabricator.services.mozilla.com/D131382
This commit is contained in:
Родитель
bf47ece634
Коммит
22abdf8e0c
|
@ -123,7 +123,7 @@ namespace mozilla {
|
||||||
// way to ensure that the child process runs as the original user in the active
|
// way to ensure that the child process runs as the original user in the active
|
||||||
// session; an elevated process could be running with different credentials than
|
// session; an elevated process could be running with different credentials than
|
||||||
// those of the session.
|
// those of the session.
|
||||||
// See https://blogs.msdn.microsoft.com/oldnewthing/20131118-00/?p=2643
|
// See https://devblogs.microsoft.com/oldnewthing/20131118-00/?p=2643
|
||||||
|
|
||||||
LauncherVoidResult LaunchUnelevated(int aArgc, wchar_t* aArgv[]) {
|
LauncherVoidResult LaunchUnelevated(int aArgc, wchar_t* aArgv[]) {
|
||||||
// We need COM to talk to Explorer. Using ProcessRuntime so that
|
// We need COM to talk to Explorer. Using ProcessRuntime so that
|
||||||
|
@ -140,12 +140,26 @@ LauncherVoidResult LaunchUnelevated(int aArgc, wchar_t* aArgv[]) {
|
||||||
return LAUNCHER_ERROR_GENERIC();
|
return LAUNCHER_ERROR_GENERIC();
|
||||||
}
|
}
|
||||||
|
|
||||||
_bstr_t exe(aArgv[0]);
|
_bstr_t cmd;
|
||||||
|
|
||||||
|
UniquePtr<wchar_t[]> packageFamilyName = mozilla::GetPackageFamilyName();
|
||||||
|
if (packageFamilyName) {
|
||||||
|
int cmdLen =
|
||||||
|
// 26 for the prefix + suffix + null terminator below
|
||||||
|
26 + wcslen(packageFamilyName.get());
|
||||||
|
wchar_t appCmd[cmdLen];
|
||||||
|
swprintf(appCmd, cmdLen, L"shell:appsFolder\\%s!FIREFOX",
|
||||||
|
packageFamilyName.get());
|
||||||
|
cmd = appCmd;
|
||||||
|
} else {
|
||||||
|
cmd = aArgv[0];
|
||||||
|
}
|
||||||
|
|
||||||
_variant_t args(cmdLine.get());
|
_variant_t args(cmdLine.get());
|
||||||
_variant_t operation(L"open");
|
_variant_t operation(L"open");
|
||||||
_variant_t directory;
|
_variant_t directory;
|
||||||
_variant_t showCmd(SW_SHOWNORMAL);
|
_variant_t showCmd(SW_SHOWNORMAL);
|
||||||
return ShellExecuteByExplorer(exe, args, operation, directory, showCmd);
|
return ShellExecuteByExplorer(cmd, args, operation, directory, showCmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
LauncherResult<ElevationState> GetElevationState(
|
LauncherResult<ElevationState> GetElevationState(
|
||||||
|
|
Загрузка…
Ссылка в новой задаче