Create TOC

2008년 9월 20일

Win32/프로세스 실행 방법에 따른 argument 해석

프로세스 실행 방법에 따라서 argument 해석이 어떻게 달라지는지 간단한 테스트를 수행했다.

테스트

프로세스를 실행시킬 수 있는 API중 ShellExecuteEx()와 CreateProcess() 에 대해서 테스트를 수행한다. 실행시 인자는 "12345"를 사용한다.

ShellExecuteEx

입력

인자
SHELLEXECUTEINFO::lpFileC:\Test\MyTest.exe
SHELLEXECUTEINFO::lpParameters12345

결과

argument를 얻는 방법결과
CWinApp::m_lpCmdLine12345
GetCommandLineW()"C:\Test\MyTest.exe" 12345
argc2
argv[0]C:\Test\MyTest.exe
argv[1]12345

CreateProcess 1

입력

lpApplicationNameNULL
lpCommandLine"C:\Test\MyTest.exe" 12345

결과

argument를 얻는 방법결과
CWinApp::m_lpCmdLine12345
GetCommandLineW()"C:\Test\MyTest.exe" 12345
argc2
argv[0]C:\Test\MyTest.exe
argv[1]12345

CreateProcess 2

입력

lpApplicationNameC:\Test\MyTest.exe
lpCommandLine"C:\Test\MyTest.exe" 12345

결과

argument를 얻는 방법결과
CWinApp::m_lpCmdLine12345
GetCommandLineW()"C:\Test\MyTest.exe" 12345
argc2
argv[0]C:\Test\MyTest.exe
argv[1]12345

CrateProcess 3

입력

lpApplicationNameC:\Test\MyTest.exe
lpCommandLine12345

결과

argument를 얻는 방법결과
CWinApp::m_lpCmdLine
GetCommandLineW()12345
argc1
argv[0]12345

결론

  1. 프로세스를 실행할때는 가급적 ShellExecuteEx() API를 사용한다.
  2. CreateProcess() API를 사용할 때는 lpCommandLine 인자에 전체 명령행을 완성해서 전달한다.