2009-07-01 3 views
5

누구나 VC++에서 프로세스를 만드는 방법을 알려 줄 수 있습니까? 그 프로세스에서 실행해야Windows에서 C++로 프로세스를 만드는 방법은 무엇입니까?

regasm.exe testdll /tlb:test.tlb /codebase 

명령을 실행해야합니다.

+1

전혀 속지가 아닙니다. 그 다른 질문은 CreateProcess가 그것을 수행하는 유일한 방법이라고 전제합니다. 이것은 하나의 개방형입니다. 기록을 위해 제안 된 속담은 http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable이었습니다. 나는 내용을 편집하는 것이 나쁜 형태라고 생각하기 때문에 질문의 내가 그 말을 코멘트에 써야한다고 생각합니다. 속임수로 폐쇄되면 SO 그 자체가 문제에 추가됩니다. – paxdiablo

답변

4

동기 명령 (실행 및 대기) 만 실행하려는 경우 가장 좋은 방법은 system() 호출 (here 참조)을 사용하여 실행하는 것입니다. 예, Linux 페이지이지만 C는 표준입니다. :-)

무엇이 실행되는지 (동기화/비동기) 및 더 많은 옵션을 CreateProcess() (here 참조) 및 그 형제가 더 세밀하게 제어하려면 Windows 플랫폼에 묶여 있습니다 (즉각적인 문제가 아닐 수도 있음).

3

CreateProcess()를 사용하여 프로세스를 생성하고 반환 값이 올바른지 확인한 다음 프로세스와 스레드의 핸들을 닫거나 WaitForSingleObject()를 사용하여 완료 될 때까지 기다린 다음 핸들을 닫습니다.

10

regasm.exe 당신이 regasm.exe으로 높은 프로세스는 다음과 같은 코드를 사용할 수 시작할 그래서 만약 (어셈블리 등록 도구), Windows 레지스트리을 변경합니다 : 프로세스가 상승 시작됩니다

#include "stdafx.h" 
#include "windows.h" 
#include "shellapi.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
     SHELLEXECUTEINFO shExecInfo; 

     shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 

     shExecInfo.fMask = NULL; 
     shExecInfo.hwnd = NULL; 
     shExecInfo.lpVerb = L"runas"; 
     shExecInfo.lpFile = L"regasm.exe"; 
     shExecInfo.lpParameters = L"testdll /tlb:test.tlb /codebase"; 
     shExecInfo.lpDirectory = NULL; 
     shExecInfo.nShow = SW_NORMAL; 
     shExecInfo.hInstApp = NULL; 

     ShellExecuteEx(&shExecInfo); 

     return 0; 
} 

shExecInfo.lpVerb = L"runas"

의미를 특권. 원하지 않는다면 shExecInfo.lpVerb을 NULL로 설정하십시오. 그러나 Vista 또는 Windows 7에서는 Windows 레지스트리의 일부분을 변경하려면 관리자 권한이 필요합니다.

+0

그것은 위보다 좋게 작동합니다. 그러나 한편으로는 어느 사용자에게 실행해야하는지 묻습니다. 이 프로그램에 대해 설명 할 수 있습니까? SHELLEXECUTEINFO shExecInfo; shExecInfo.lpVerb = L "runas"; – Cute

+0

null로 실행 한 다음 요청하지 않고 작동합니다. ok이 L은 무엇을 의미하며이 프로세스는 어떻게 생성 되었습니까 ?? – Cute

+0

L은 유니 코드 문자열 용입니다. –

관련 문제