gpt4 book ai didi

c++ - 尝试使用 CreateProcess() ;没有编译器错误,但 main 不断崩溃

转载 作者:行者123 更新时间:2023-11-28 03:09:47 25 4
gpt4 key购买 nike

我正在尝试创建一个在 firefox 中与主进程分开打开 PDF 的功能。我相信我在使用 createProcess 的参数时遇到了问题...非常感谢任何帮助

编辑:正在创建批处理文件,我已经测试了几次,并解释一下:批处理文件是因为我真的不知道自己在做什么,我是计算机科学专业的学生,​​这是一个帮助我工作的副项目。我在一家律师事务所工作,在收到邮件时以电子方式归档。我想制作一个简单的程序来循环遍历扫描目录,显示扫描件并提示用户输入有关文档的信息。因此我需要能够动态构建文件路径。本来我是用“系统”打开firefox显示文档的。经过一番尝试后,我让它可以使用批处理文件。然后我了解到 system 是一个阻塞命令,我需要启动一个单独的线程。这是我遇到 createprocess 的地方。我只是继续使用我旧系统想法中的批处理文件......我想得越多,我不记得哪个教授建议使用批处理文件或为什么......

void openPDF(char scansQueue[][MAX_NAME], int index)
{
// build bat file
fstream outfile;
outfile.open("C:\\firefox.bat");
if(outfile.good())cout<<"outfile good!!!!"<<endl;
outfile<<"\"C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe\" \"C:\\Scans\\" <<scansQueue[index]<<"\"";

STARTUPINFOW si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
if(!CreateProcess(NULL, L"C:\\firefox", NULL, NULL, false, 0, NULL, NULL, &si, &pi))cout<<"PROCESS FAILED TO EXECUTE!!!";
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

}

最佳答案

这段代码有几个问题。评论中已经指出了一些(关闭失败时可能无效的句柄,无法创建批处理文件的可能性,以及相当可疑的命令行)。这里还有几个问题。

首先,您不能以这种方式运行批处理文件。

documentation对于 CreateProcess 明确指出:

To run a batch file, you must start the command interpreter; set lpApplicationName to cmd.exe and set lpCommandLine to the following arguments: /c plus the name of the batch file.

其次,您正在为 lpCommandLine 传递一个字符串文字,这也是文档明确禁止的:

lpCommandLine [in, out, optional]

...

The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.

最后,为什么要创建一个临时批处理文件来运行单个命令?您可以轻松编写 CreateProcess 调用来直接启动 Firefox。

关于c++ - 尝试使用 CreateProcess() ;没有编译器错误,但 main 不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798403/

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