Merge pull request #107 from mxve/launcherargs
fix command line arguments for alterware-launcher.exe
This commit is contained in:
commit
eed18a76f2
@ -244,12 +244,12 @@ namespace Components
|
||||
return;
|
||||
}
|
||||
|
||||
auto workingDir = std::filesystem::current_path().string();
|
||||
const std::string binary = *Game::sys_exitCmdLine;
|
||||
const std::string command = binary == "iw4x-sp.exe" ? "iw4x-sp" : "iw4x";
|
||||
const std::filesystem::path workingDir = std::filesystem::current_path();
|
||||
const std::wstring binary = Utils::String::Convert(*Game::sys_exitCmdLine);
|
||||
const std::wstring commandLine = std::format(L"\"{}\" iw4x --pass \"{}\"", (workingDir / binary).wstring(), Utils::GetLaunchParameters());
|
||||
|
||||
SetEnvironmentVariableA("MW2_INSTALL", workingDir.data());
|
||||
Utils::Library::LaunchProcess(binary, std::format("{} --pass \"{}\"", command, GetCommandLineA()), workingDir);
|
||||
SetEnvironmentVariableA("MW2_INSTALL", workingDir.string().data());
|
||||
Utils::Library::LaunchProcess(binary, commandLine, workingDir);
|
||||
}
|
||||
|
||||
__declspec(naked) void QuickPatch::SND_GetAliasOffset_Stub()
|
||||
|
@ -102,17 +102,17 @@ namespace Utils
|
||||
this->module_ = nullptr;
|
||||
}
|
||||
|
||||
void Library::LaunchProcess(const std::string& process, const std::string& commandLine, const std::string& currentDir)
|
||||
void Library::LaunchProcess(const std::wstring& process, const std::wstring& commandLine, const std::filesystem::path& currentDir)
|
||||
{
|
||||
STARTUPINFOA startupInfo;
|
||||
STARTUPINFOW startupInfo;
|
||||
PROCESS_INFORMATION processInfo;
|
||||
|
||||
ZeroMemory(&startupInfo, sizeof(startupInfo));
|
||||
ZeroMemory(&processInfo, sizeof(processInfo));
|
||||
startupInfo.cb = sizeof(startupInfo);
|
||||
|
||||
CreateProcessA(process.data(), const_cast<char*>(commandLine.data()), nullptr,
|
||||
nullptr, false, NULL, nullptr, currentDir.data(),
|
||||
CreateProcessW(process.data(), const_cast<wchar_t*>(commandLine.data()), nullptr,
|
||||
nullptr, false, NULL, nullptr, currentDir.wstring().data(),
|
||||
&startupInfo, &processInfo);
|
||||
|
||||
if (processInfo.hThread && processInfo.hThread != INVALID_HANDLE_VALUE)
|
||||
|
@ -65,7 +65,7 @@ namespace Utils
|
||||
return T();
|
||||
}
|
||||
|
||||
static void LaunchProcess(const std::string& process, const std::string& commandLine, const std::string& currentDir);
|
||||
static void LaunchProcess(const std::wstring& process, const std::wstring& commandLine, const std::filesystem::path& currentDir);
|
||||
|
||||
private:
|
||||
HMODULE module_;
|
||||
|
@ -163,6 +163,28 @@ namespace Utils
|
||||
}
|
||||
}
|
||||
|
||||
std::wstring GetLaunchParameters()
|
||||
{
|
||||
std::wstring args;
|
||||
|
||||
int numArgs;
|
||||
auto* const argv = CommandLineToArgvW(GetCommandLineW(), &numArgs);
|
||||
|
||||
if (argv)
|
||||
{
|
||||
for (auto i = 1; i < numArgs; ++i)
|
||||
{
|
||||
std::wstring arg(argv[i]);
|
||||
args.append(arg);
|
||||
args.append(L" ");
|
||||
}
|
||||
|
||||
LocalFree(argv);
|
||||
}
|
||||
|
||||
return args;
|
||||
}
|
||||
|
||||
HMODULE GetNTDLL()
|
||||
{
|
||||
return GetModuleHandleA("ntdll.dll");
|
||||
|
@ -24,6 +24,8 @@ namespace Utils
|
||||
|
||||
void OpenUrl(const std::string& url);
|
||||
|
||||
std::wstring GetLaunchParameters();
|
||||
|
||||
bool HasIntersection(unsigned int base1, unsigned int len1, unsigned int base2, unsigned int len2);
|
||||
|
||||
template <typename T>
|
||||
|
Loading…
Reference in New Issue
Block a user