Process launcher updates (#6183)
* Enable process and ap connection tests on linux * Updated 'OpenProjectManager' to use new the ProcessLauncher argument type * Add logic to double-escape escaped double quotes in arguments on windows platforms * Updated argument for LaunchProjectManager to reflect new ProcessLauncher argument type * Fixed unit test arguments for 'arg=value' condition * Fix compile errors for BuilderManager and RHI.Edit\Utils.cpp * PAL'ify the GetCommandLineParametersAsString() to handle windows specific behavior Signed-off-by: Steve Pham <82231385+spham-amzn@users.noreply.github.com> Co-authored-by: byrcolin <byrcolin@amazon.com>
This commit is contained in:
+39
-1
@@ -10,6 +10,7 @@
|
||||
#include <AzCore/std/string/conversions.h>
|
||||
#include <AzCore/std/parallel/thread.h>
|
||||
#include <AzCore/PlatformIncl.h>
|
||||
#include <AzCore/StringFunc/StringFunc.h>
|
||||
|
||||
#include <AzFramework/Process/ProcessWatcher.h>
|
||||
#include <AzFramework/Process/ProcessCommunicator.h>
|
||||
@@ -99,7 +100,7 @@ namespace AzFramework
|
||||
AZStd::wstring editableCommandLine;
|
||||
AZStd::wstring processExecutableString;
|
||||
AZStd::wstring workingDirectory;
|
||||
AZStd::to_wstring(editableCommandLine, processLaunchInfo.m_commandlineParameters);
|
||||
AZStd::to_wstring(editableCommandLine, processLaunchInfo.GetCommandLineParametersAsString());
|
||||
AZStd::to_wstring(processExecutableString, processLaunchInfo.m_processExecutableString);
|
||||
AZStd::to_wstring(workingDirectory, processLaunchInfo.m_workingDirectory);
|
||||
|
||||
@@ -355,4 +356,41 @@ namespace AzFramework
|
||||
::TerminateProcess(m_pWatcherData->processInformation.hProcess, exitCode);
|
||||
}
|
||||
}
|
||||
|
||||
AZStd::string ProcessLauncher::ProcessLaunchInfo::GetCommandLineParametersAsString() const
|
||||
{
|
||||
struct CommandLineParametersVisitor
|
||||
{
|
||||
AZStd::string operator()(const AZStd::string& commandLine) const
|
||||
{
|
||||
return commandLine;
|
||||
}
|
||||
|
||||
AZStd::string operator()(const AZStd::vector<AZStd::string>& commandLineArray) const
|
||||
{
|
||||
AZStd::string commandLineResult;
|
||||
|
||||
// When re-constructing a command line from an argument list (on windows), if an argument
|
||||
// is double-quoted, then the double-quotes must be escaped properly otherwise
|
||||
// it will be absorbed by the native argument parser and possibly evaluated as
|
||||
// multiple values for arguments
|
||||
AZStd::string_view escapedDoubleQuote = R"("\")";
|
||||
|
||||
AZStd::vector<AZStd::string> preprocessedCommandArray;
|
||||
|
||||
for (const auto& commandArg : commandLineArray)
|
||||
{
|
||||
AZStd::string replacedArg = commandArg;
|
||||
AZ::StringFunc::Replace(replacedArg, R"(")", R"("\")", false, true, true);
|
||||
preprocessedCommandArray.emplace_back(replacedArg);
|
||||
}
|
||||
AZ::StringFunc::Join(commandLineResult, preprocessedCommandArray.begin(), preprocessedCommandArray.end(), " ");
|
||||
|
||||
return commandLineResult;
|
||||
}
|
||||
};
|
||||
|
||||
return AZStd::visit(CommandLineParametersVisitor{}, m_commandlineParameters);
|
||||
}
|
||||
|
||||
} // namespace AzFramework
|
||||
|
||||
Reference in New Issue
Block a user