在教程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();
}
答案 0 :(得分:1)
解析命令行参数以提供main函数的参数时,第一个标记将被视为可执行文件。一个被调用的程序可能会尝试打开第二个标记作为其文件参数,当然你没有一个。
通常的做法是重复程序名称作为命令行中的第一个标记。例如
process::start("c:\\windows\\notepad.exe", "notepad c:\\windows\\PFRO.txt");