Luc*_*ore 2 c++ winapi visual-c++
我正在尝试从不同的流程启动流程.实现这一目标的机制不会发生变化.发射器和原始过程都位于C:\dir.
我正在从cmd文件中启动我的启动器.该cmd文件本身位于其他地方,为了为它找到了启动程序可执行文件,我设置的PATH变量:
set PATH=C:\dir;%PATH%;
launcher.exe
Run Code Online (Sandbox Code Playgroud)
启动程序使用以下代码启动子进程:
STARTUPINFO startupInfo;
startupInfo.cb = sizeof (STARTUPINFO);
startupInfo.lpReserved = 0;
startupInfo.lpDesktop = NULL;
startupInfo.lpTitle = NULL;
startupInfo.dwX = 0;
startupInfo.dwY = 0;
startupInfo.dwXSize = 0;
startupInfo.dwYSize = 0;
startupInfo.dwXCountChars = 0;
startupInfo.dwYCountChars = 0;
startupInfo.dwFillAttribute = 0;
startupInfo.dwFlags = _showInForeground ? STARTF_USESHOWWINDOW : 0;
startupInfo.wShowWindow = _showInForeground ? 1 : 0;
startupInfo.cbReserved2 = 0;
startupInfo.lpReserved2 = 0;
PROCESS_INFORMATION processInfo;
BOOL retVal = CreateProcess("child.exe", "", NULL, NULL, FALSE,
_showInForeground ? (CREATE_NEW_CONSOLE | CREATE_DEFAULT_ERROR_MODE) : CREATE_DEFAULT_ERROR_MODE,
NULL, NULL, &startupInfo,&processInfo);
Run Code Online (Sandbox Code Playgroud)
它返回0并且最后一个错误是2,即File not found.
如果有帮助,则GetCurrentDirectory返回所在的目录cmd,而不是C:\dir.我猜测CreateProcess找不到child.exe因为PATH不可用.
任何想法如何让这个工作?
编辑:一些好的评论与答案(因为评论有时被忽视):
建议:将statupInfo.lpDirectory设置为"c:\ dir"
答:不能.我从cmd开始,因为目录可能会更改.
根据MSDN,CreateProcess的实际做搜索路径,但仅当lpApplicationName是NULL和可执行文件中第一个标记lpCommandLine.
换句话说,如果你打电话它应该工作CreateProcess(NULL, "child.exe", ...
我没有尝试过,所以YMMV等等.
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |