【发布时间】:2015-01-01 07:45:33
【问题描述】:
我试图弄清楚如何将现有可执行文件中的文件名传递给新生成的相同类型的可执行文件,然后新的 exe 加载所述文件名。以下是我正在做的事情,但我真的有点迷路了。
CString cstrExePathLoc;
GetModuleFileName(NULL, cstrExePathLoc.GetBuffer(MAX_PATH), MAX_PATH);
wchar_t szCommandLine[1024] = _T("C:\\Users\\Home\\Desktop\\testfile.tmp");
PROCESS_INFORMATION processInfo;
STARTUPINFO startupInfo;
::ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
CreateProcess(
cstrExePathLoc, szCommandLine, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE, NULL, NULL,
&startupInfo, &processInfo
);
编辑:这仍然没有打开文件。新的 ExeApp 已启动,但未加载任何文件。完全没有产生错误。
我在网上搜索过,但没有找到清楚说明如何执行此操作的示例。任何帮助,将不胜感激。谢谢。
编辑:这里的简单解决方案感谢下面的 Robson Filho Colodeti。
CString cstrExeFilePathAndFilePath2Open = cstrExePathLoc;
cstrExeFilePathAndFilePath2Open += L" \"";
cstrExeFilePathAndFilePath2Open += cstrFilePath2Open;
cstrExeFilePathAndFilePath2Open += L"\"";
CreateProcess(csExePath, cstrExeFilePathAndFilePath2Open.GetBuffer(0), NULL, NULL, TRUE, NULL, NULL, NULL, &sui, &pi);
【问题讨论】:
-
在
lpCommandLine的CreateProcess参数中传递文件名。在 MFC 应用程序中,您可以使用CWinApp::m_lpCmdLine成员访问命令行。在控制台应用程序中,它在argc, argv主要功能参数中可用。 -
通常你使用 ShellExecute 启动新进程,然后传递你想要的任何命令行参数。
-
所有这些都可以在一个函数中完成,还是我需要从其他地方调用并发送到其他地方?我会稍微修改一下我的问题,因为将文件路径传递给 lpCommandLine 不会打开文件。
-
@ReturnVoid 你写了读取命令行参数和打开文件的代码吗?