c – CreateProcessW不遵守命令行
参见英文答案 >
CreateProcess doesn’t pass command line arguments????????????????????????????????????8个
我正在尝试在dll中实现CreateProcessW,以便用户可以在单独的进程中启动应用程序. 对于初学者,我在代码中硬编码命令,直到我搞清楚为止. 我有 STARTUPINFO si = {sizeof(STARTUPINFO),0}; si.cb = sizeof(si); PROCESS_INFORMATION pi = {0}; LPCTSTR AppName=L"c:utilitiesdepends.exe"; LPTSTR Command = L"c:utilitiestee.exe"; if (CreateProcessW(AppName,Command,CREATE_DEFAULT_ERROR_MODE,&si,&pi)) { CloseHandle(pi.hThread); CloseHandle(pi.hProcess); return GX_RESULT_OK; } else { .. show error msg } 这将启动Depends但不会打开Tee.exe.没有错误,它只是忽略命令行参数.参数是正确的,我可以在运行提示符下运行它,它工作正常.如果我将AppName留空并指定Depends.exe作为Command参数,它也可以,但如果我指定 LPTSTR Command = L"c:utilitiesdepends.exe c:utilitiestee.exe"; 我得到错误3:“系统找不到指定的路径”. 此外,通过指定lpCurrentDirectory参数,它同样被忽略. 解决方法
您必须在命令中提供可执行文件
> Appname应包含可执行文件的完整路径 如果你想用记事本打开文件t.txt,你可以给出如下: > Appname =“c:/windows/notepad.exe”; 你甚至不必提供真正的程序名称,即使假名也能完成这项工作,因为它只是一个占位符. 像这样:command =“fake c:/temp/t.txt”; 现在在notepad.exe中: > argv [0] =“记事本”; 看到这个完整的例子: #include <Windows.h> #include <iostream> using namespace std; int main(){ STARTUPINFO si = {sizeof(STARTUPINFO),0}; si.cb = sizeof(si); PROCESS_INFORMATION pi = {0}; LPTSTR AppName=L"C:/Windows/notepad.exe"; wchar_t Command[] = L"notepad C:/Temp/t.txt"; DWORD res = CreateProcess(AppName,&pi); if (res) { CloseHandle(pi.hThread); CloseHandle(pi.hProcess); return 0; } else { cerr<<"error..."<<GetLastError()<<endl; }; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Integrate the flash slide show picture control with the
- 如何解决Ajax跨域问题
- TP-LINK WR720N升级8M Flash 64M Ram,加USB-TTL,烧openwr
- 跨域JSONP原理及调用具体示例
- 在Keil4中建立基于V3.4.0固件库的STM32工程
- sqlite的索引优化
- swift – 实现AVCaptureFileOutputDelegate和AVCaptureVide
- ruby-on-rails – 是否可以在Ruby中对默认参数值进行动态方
- Oracle/PLSQL While Loop
- 6大设计原则(三)---依赖倒置原则