CreateProcess 를 할때 Unicode 프로젝트에서 문제점

현재 페이지를 로딩중입니다.
만약 페이지 로딩이 끝났는데 본문이 보이지 않는다면
광고차단 플러그인 때문이니 잠시 플러그인을 꺼주시면 감사하겠습니다.

The current page is loading.
If the page loading is over but the text is not visible
This is because of the ad blocking plugin, so please be sure to turn off the plugin for a while.

인스톨러 관련해서 처음 초기화 작업하는 어플을 작성하다보니
다른 프로세스를 순차적으로 실행하는데
이게 안되는거다 ㅜ.ㅜ;

이전엔 잘 쓰던건데 왜 안되는지 삽질 삽질 삽질하다가
방법을 찾았는데.

Unicode 프로젝트에서는
아래와 같은 방법으로 하면 프로세서 생성이 안된다.

STARTUPINFO si;
PROCESS_INFORMATION pi;
memset( &si, 0, sizeof( si ) );
memset( &pi, 0, sizeof( pi ) );
BOOL bRet = ::CreateProcess( NULL,
_T("notepad.exe") , NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

아래와 같이 미리 버퍼에 복사하고 그 버퍼를 복사해 넣어야지만 생성된다.

STARTUPINFO si;
PROCESS_INFORMATION pi;
memset( &si, 0, sizeof( si ) );
memset( &pi, 0, sizeof( pi ) );
wchar_t tmp[] = _T("notepad.exe");
BOOL bRet = ::CreateProcess( NULL,
tmp  , NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

왜 유니코드에서 이런 문제가 되는지는 정확히는 모르겠지만.
아마 문자열 길이나 유니코드시 첫바이트 값이라던지 그런게 아닐까 하는 추정을 해본다.

멀티바이트 프로젝트에서는 위와 같은 상황이 발생하지는 않는다.

크리에이티브 커먼즈 라이선스 Linsoo의 저작물인 이 저작물은(는)크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

“CreateProcess 를 할때 Unicode 프로젝트에서 문제점”에 대한 6개의 댓글

댓글 남기기

이메일은 공개되지 않습니다.

This site uses Akismet to reduce spam. Learn how your comment data is processed.