2009-07-01 21 views
5

¿Alguien me puede decir cómo crear un proceso en VC++? Necesito ejecutar¿Cómo crear un proceso en C++ en Windows?

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

comando en ese proceso.

+1

No es una tontería en absoluto. Esa otra pregunta presupone que CreateProcess es la única forma de hacerlo. Este es más abierto. Para el registro, el truco sugerido fue http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable - Lo he sacado de la pregunta ya que considero que es mala forma de editar el contenido. Creo que eso debería ponerse en los comentarios. Si se cierra como un engaño, entonces SO lo agregará a la pregunta. – paxdiablo

Respuesta

4

Si solo desea ejecutar un comando síncrono (ejecutar y esperar), su mejor opción es simplemente utilizar la llamada system() (consulte here) para ejecutarla. Sí, sé que es una página de Linux, pero C es un estándar, ¿no? :-)

Para obtener un control más detallado de lo que se ejecuta, cómo se ejecuta (sincronización/asincronización) y muchas más opciones, CreateProcess() (ver here), y sus hermanos, son probablemente mejores, aunque usted estará vinculado a la plataforma de Windows (que puede no ser de interés inmediato para usted).

3

Use CreateProcess() para generar el proceso, verifique el valor de retorno para asegurarse de que comenzó bien, cierre los identificadores al proceso y al subproceso o use WaitForSingleObject() para esperar hasta que finalice y luego cierre los identificadores.

10

regasm.exe (Herramienta de registro de la Asamblea) realiza cambios en el registro de Windows, por lo que si desea iniciar regasm.exe proceso tan elevada que podría utilizar el siguiente código:

#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" significa que el proceso se inició con elevada privilegios. Si no quiere, simplemente establezca shExecInfo.lpVerb en NULO. Pero en Vista o Windows 7 se requieren derechos de administrador para cambiar algunas partes del Registro de Windows.

+0

Funciona bien en lugar de hacerlo arriba. Mientras tanto, se pregunta bajo qué usuario debe ejecutarse. ¿Puede explicarnos sobre este programa SHELLEXECUTEINFO shExecInfo; shExecInfo.lpVerb = L "runas"; – Cute

+0

He modificado l "ejecutar como" para anular y luego funciona sin preguntar. ok ¿qué significa esta L y cómo se creó el proceso con esto? – Cute

+0

L es para cadena Unicode. –

Cuestiones relacionadas