c++ createprocess - 命令行参数的字符串var - 没有任何反应

标签 c++ string std createprocess

所以我正在尝试使用字符串变量创建一个进程。

STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
ZeroMemory(&pi, sizeof(pi));

si.cb = sizeof(si);

std::string cmd_line = game_path + " " + std::string(game_params);

std::cout << cmd_line << "\n";

if (!CreateProcess(NULL, LPTSTR(cmd_line.c_str()), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
    std::cout << "fail\n";
    return false;
}

cout cmd_line 的输出是正确的路径和参数:

C:\\Program Files (x86)\\My_Game\\Game.exe -test -admin

createprocess 调用返回 false,但我不确定具体原因。我对此很陌生,所以任何帮助和建议都会很棒。

最佳答案

int _tmain(int argc, _TCHAR* argv[])
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    ZeroMemory(&pi, sizeof(pi));

    si.cb = sizeof(si);

    std::string game_path = "C:\\Windows\\system32\\calc.exe";
    std::string game_params = "-test -admin";

    std::string cmd_line = game_path + " " + std::string(game_params);

    std::cout<<cmd_line << "\n";

    TCHAR tszCmdLine[1024] = {0};
    mbstowcs(tszCmdLine, cmd_line.c_str(), 1024);
    _tprintf(tszCmdLine);

    if (!CreateProcess(NULL, tszCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
        std::cout<<"fail\n"<<GetLastError();
        return false;
    }
}

const char* 不能作为 CreateProcess() 的参数。您必须使用 mbstowcs()

char* 字符串转换为 tchar* 字符串

关于c++ createprocess - 命令行参数的字符串var - 没有任何反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46375624/

相关文章:

c++ - 如何将十六进制字符串拆分为 std::vector?

c++ - 字符串数组到 C++ 函数

c++ - 访问 stringstream 对象的关联字符串

jquery - 使用Jquery从2个字符串中提取字符串

c++ - C++ 中的字符串错误 C2061

c# - 将 0x0000000000000001 从字符串转换为 long

c++ - 在临时范围内基于范围的 for 循环

c++ - 引用每个 const 字符串是一种好习惯吗?

计算一年中有多少个星期三

c++ - 如何使用 boost::uuids::uuid 转换为 128/64 位数字?