인스톨러 관련해서 처음 초기화 작업하는 어플을 작성하다보니 다른 프로세스를 순차적으로 실행하는데 이게 안되는거다 ㅜ.ㅜ;
이전엔 잘 쓰던건데 왜 안되는지 삽질 삽질 삽질하다가 방법을 찾았는데 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 );
왜 유니코드에서 이런 문제가 되는지는 정확히는 모르겠지만 아마 문자열 길이나 유니코드시 첫바이트 값이라던지 그런게 아닐까 하는 추정을 해본다.
멀티바이트 프로젝트에서는 위와 같은 상황이 발생하지는 않는다.
답글 남기기