gpt4 book ai didi

C++进程类错误

转载 作者:行者123 更新时间:2023-11-28 07:03:02 24 4
gpt4 key购买 nike

按照教程 here ,我决定为 C++ 创建一个 process 类,这样我就不必不断地编写相同的代码来启动一个进程。它确实可以启动该过程,但是当我传递命令行函数时,它什么也不做。示例(“c:\\windows\\notepad.exe”、“c:\\windows\\PFRO.txt”)。有什么问题?

注意:format只是一个基本的格式化函数,使用vsprintf

class process
{
public:
static BOOL __stdcall start(LPCSTR _Proc_name, LPSTR _Command_line = NULL, LPSECURITY_ATTRIBUTES _Proc_attrib = NULL,
LPSECURITY_ATTRIBUTES _Thread_attrib = NULL, BOOL _Inherits_handles = FALSE, DWORD _Creation_flags = NULL,
LPVOID _Environment = NULL, LPCSTR _Cur_directory = NULL)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(_Proc_name, _Command_line, _Proc_attrib, _Thread_attrib,
_Inherits_handles, _Creation_flags, _Environment, _Cur_directory, &si, &pi))
{
fputs(format("process::start(...) failed [%d]\n", GetLastError()), stderr);
return false;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return true;
}
};

int main()
{
process::start("c:\\windows\\notepad.exe", "c:\\windows\\PFRO.txt");
getchar();
}

最佳答案

当解析命令行参数为主函数提供参数时,第一个标记被认为是可执行文件。被调用的程序很可能会尝试打开第二个 标记作为它的文件参数,当然你没有。

通常的做法是重复程序名称作为命令行中的第一个标记。例如

process::start("c:\\windows\\notepad.exe", "notepad c:\\windows\\PFRO.txt");

关于C++进程类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22157190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com