无法使用参数启动进程
Cannot start process with arguments
我试图用C++应用程序中的参数启动一个新进程,但它不起作用——它只是在没有这些参数的情况下启动进程
这是我的代码
void Launch(HWND hWnd) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
char bff[512];
size_t size = strlen(bff) + 1;
wchar_t* bff2 = new wchar_t[size];
size_t outSize;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
sprintf_s(bff, "-rc:eu -lac:eng");
mbstowcs_s(&outSize, bff2, size, bff, size-1);
char* pathe = NULL;
size_t size3 = MAX_PATH;
pathe = _getcwd(pathe, size3);
std::string myString(pathe);
std::size_t found = myString.find_last_of("\");
wchar_t* txt = L"\Client.exe";
std::wstring stre(txt);
std::wstring stemp = s2ws(myString) + stre;
return;
if (!CreateProcess(stemp.c_str(), bff2, NULL, NULL, 0, 0, NULL, NULL, &si, &pi)) {
MessageBox(hWnd, L"Cannot launch Client!", L"Error", 0);
return;
}
MessageBox(hWnd, L"Client should start soon!", L"Success!", 0);
}
感谢
CreateProcess比旧的C约定更通用,可以将可执行映像的名称作为argv[0]
传递给新创建的进程。它允许您传递任意的命令行参数lpApplicationName指定可执行映像,lpCommandLine传递到argv
,从argv[0]
开始。
通常不需要填充这两个参数。到目前为止,调用CreateProcess
最常见的方法是将NULL
作为lpApplicationName
参数传递,并将整个命令行(包括可执行映像的正确引用、完全限定的路径名)作为lpCommandLine参数传递。
您的呼叫本质上应该是这样的(伪代码):
CreateProcessW(NULL, L""<path to exe>\Client.exe" -rc:eu -lac:eng", ...);
注意:您的大多数字符串处理也是错误的。您应该始终使用
wchar_t
,更好的是使用std::wstring
。除此之外,调用_getcwd
是一个等待发生的错误。当前工作目录由进程中的所有线程共享。它可以随时更改。永远不要用它。相反,查询当前正在执行的模块的路径,或从注册表中检索安装路径,等等。相关文章:
- 在挂钩启动新线程时解除挂钩进程
- 如何制作启动 Python 脚本的 linux 后台进程(在 c 中)
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 通过服务启动进程后,从SHGetKnownFolderPath 0x80070005错误
- 如何在启动时将 gdbserver 附加到进程?
- 在C++中启动进程时隐藏命令提示符
- 如何正确启动进程并转发 stdin/stdout/stderr
- 以不同用户身份启动进程
- 使用 posix_spawn 启动进程
- 当java作为服务运行时,从java启动进程
- 当用std::system启动进程时,我可以指定一个工作目录吗
- 在窗口错误中使用QProcess启动进程:"Timers can only be used with threads started with QThread"
- 创建进程 我无法启动进程
- Windows 7或Windows 2008如何在本地系统帐户或系统上下文中启动进程(从桌面应用程序)
- 在派生的线程中启动进程
- Windows服务启动进程结束通知(20032008)
- 无法使用参数启动进程
- 提示重新启动进程以获得管理权限
- 如何在 C、C++ 的 Linux 操作系统上启动进程
- 在linux上用c++启动进程,使用环境变量c++