열공해야하는.. 님이 쓰신 글 :
: 안녕하세요.
:
: 2010에서 osk.exe 동작하려는데 에러가 뜨네요 ,..
:
: CreateProcess() failed:740
:
: 조치 방법 알려주시면 감사하겠습니다.
:
: 6.0에서는 에러 없이 바로 실행됩니다...
:
:
:
: //---------------------------------------------------------------------------
: PROCESS_INFORMATION pinfo;
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: STARTUPINFO start;
: memset(&start, 0, sizeof(STARTUPINFO));
: start.cb = sizeof(start);
: start.wShowWindow = SW_SHOWDEFAULT;
: SECURITY_ATTRIBUTES sec;
: sec.nLength = sizeof(sec);
: sec.lpSecurityDescriptor = NULL;
: sec.bInheritHandle = TRUE;
:
: if(CreateProcess("c:\\Windows\\System32\\osk.exe", NULL, &sec, &sec, TRUE,
: 0, NULL, NULL, &start, &pinfo) != TRUE)
: {
: ShowMessage(AnsiString("CreateProcess() failed: ") + GetLastError());
: return;
: }
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: TerminateProcess(pinfo.hProcess,0);//또는 ExitProcess 사용해서 죽임..
: pinfo.hProcess=0;
: }
: //---------------------------------------------------------------------------
빌더 2010 버전에서는 컴파일러가 실행파일에 Manifest 정보를 생성해서 그런게 아닌가 싶네요
프로젝트 컴파일러 옵션에서 manifest 생성을 하지 않게 하는 옵션이 있으면 사용하지 않게 설정하고
다시 컴파일 해보세요. 지금 RAD XE2 하나만 설치 되어있어서 2010 옵션은 확인해 볼수가 없네요.
그리고...
Vista 이후 부터는 UAC 적용 문제도 있고, menifest에 Vista 이후 부터 지원되는 기능과 관련있는
정보가 들어가 있는 실행파일인 경우 CreateProcess 대신, Shell 펑션을 사용해서 프로세스를
생성해 줘야 합니다.
6.0으로 런타임 패키지 사용하지 않게 컴파일한 파일 있으면 실행파일 한번 올려 보시죠.
|