神奇的CreateProcess命令行
时间:2010-08-26 来源:glshader
今天用CreateProcess创建一个进程, 并且使用命令行参数, 也就是lpCommandLine这个参数
BOOL WINAPI CreateProcess( __in_opt LPCTSTR lpApplicationName, __inout_opt LPTSTR lpCommandLine, __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes, __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, __in BOOL bInheritHandles, __in DWORD dwCreationFlags, __in_opt LPVOID lpEnvironment, __in_opt LPCTSTR lpCurrentDirectory, __in LPSTARTUPINFO lpStartupInfo, __out LPPROCESS_INFORMATION lpProcessInformation );
我原本以为微软不会恶搞我, 但是没想到啊!
在创建的进程中, 我竟然无法从_tWinMain中获得命令行参数!
int CALLBACK WinMain( __in HINSTANCE hInstance, __in HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nCmdShow );
这里的 lpCmdLine为空.
我用procexp.exe查了一下, 命令行中有值, 我再用GetCommandLine, 也有值.
但是 lpCmdLine竟然是空.
最后我到网上查了一下, 在使用 lpCmdLine的时候, 传入的命令行参数要自己用空格隔开!!!
比如:
WCHAR commandLine[32] = {0}; ::swprintf_s(commandLine, 32, " arg"); ::CreateProcess(..., commandLine, ...);
这样才能在创建的进程中从lpCmdLine获得命令行参数.
相关阅读 更多 +