프로그램

MFC 에서 CreateProcess() 가 Access Violation 을 일으킬때

(주)CKBcorp., 2015. 7. 15. 06:00
반응형


MFC 에서 CreateProcess() 를 사용해서 외부 프로그램을 실행하는데, 이상하게 Access Violation 이 일어났다.

아무리 뒤져봐도 메모리 오염이 없어서, 뭘까 하고 찾아보다가

혹시나 해서 검색해봤더니, 의외로 StockOverflow 에서 해답을 내려 주셨다.

http://stackoverflow.com/questions/11339186/createprocess-fails-with-an-access-violation 를 참고하면 되고,


이건 좀 설명이 필요해서, 앞뒤를 다 적는다. 


CreateProcess() 의 테스트 코드 사용할때에, 실행하는 명령행 전달 ( 두 번째 인자 ) 를 아래와 같이 사용했었다.


1. 실행하는 명령행 전달값을 static 으로 주면 에러난다. 예를 들어.


CreateProcess( ..., L"cmd.exe", ... );


이러면 에러난다. Access Violation.


2. 변수로 주면 문제없다. 예를 들어, 


TCHAR tcmdstr[128] = TEXT("notepad.exe");

CreateProcess( ..., tcmdstr, ... ); 


이러면 정상작동.



좀 의외긴 한데, CreateProcess() 함수가 원래 이렇게 만들어져 있다니, 딱히 할 말은 없다.


MSDN 의 함수 인자값 설명과 예제는 

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx


를 참고하면 된다.





 


반응형