Cuando se llama a CreateProcess(), Sistema(), etc., asegúrese de dobles comillas sus cadenas de nombre de archivo (incluida la nombre de archivo del programa de comando) en caso de que los nombres de los archivos y/o la ruta totalmente calificada tengan espacios, de lo contrario las partes de la ruta del nombre del archivo serán analizadas por el intérprete de comandos como argumentos separados.
system("\"d:some path\\program.exe\" \"d:\\other path\\file name.ext\"");
Para Windows se recomienda utilizar CreateProcess(). Tiene una configuración más desordenada, pero usted tiene más control sobre cómo se inician los procesos (como lo describe Greg Hewgill). Para rápido y sucio, también puedes usar WinExec(). (el sistema() es portátil para UNIX).
Al iniciar archivos por lotes, es posible que deba iniciar con cmd.exe (o command.com).
WinExec("cmd \"d:some path\\program.bat\" \"d:\\other path\\file name.ext\"",SW_SHOW_MINIMIZED);
(o SW_SHOW_NORMAL
si desea que la ventana de comando que se muestra).
Windows debería encontrar command.com o cmd.exe en el sistema PATH, por lo que no debería necesitar una cualificación completa, pero si quiere estar seguro de que puede componer el nombre de archivo completo con CSIDL_SYSTEM
(no simplemente use C: \ Windows \ system32 \ cmd.exe).
Estos son consejos maravillosos para posibles obstáculos futuros y aclaraciones generales. Muchas gracias. – Will