Era error 87, de parámetros.
Ya lo resolví, me ayudaron en el foro de la msdn, me dijeron que CreateEnvironmentBlock siempre devuelve un bloque unicode, así es que me faltaba el flag CREATE_UNICODE_ENVIRONMENT
Al final mi code quedó así:
Ya lo resolví, me ayudaron en el foro de la msdn, me dijeron que CreateEnvironmentBlock siempre devuelve un bloque unicode, así es que me faltaba el flag CREATE_UNICODE_ENVIRONMENT
Al final mi code quedó así:
Código [Seleccionar]
#define UNICODE
#include <windows.h>
#include <stdio.h>
#include <userenv.h>
int main()
{
LPVOID env_block;
if (!CreateEnvironmentBlock(&env_block, NULL, FALSE))
{
printf("No CreateEnvironmentBlock. Error:%d\n",GetLastError());
}
PROCESS_INFORMATION pi;
memset(&pi, 0, sizeof(pi));
STARTUPINFO si;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.lpTitle = TEXT("");
si.wShowWindow = SW_NORMAL;
LPTSTR program = TEXT("cmd.exe");
LPTSTR params = TEXT("/c \"C:\\Users\\Carlos\\Desktop\\hola.cmd\"");
BOOL b;
b = CreateProcess(program, params, NULL, NULL, FALSE, CREATE_NEW_CONSOLE|CREATE_UNICODE_ENVIRONMENT|NORMAL_PRIORITY_CLASS, env_block, NULL, &si, &pi);
if (!b)
{
printf("No CreateProcess. Error:%d\n",GetLastError());
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
DestroyEnvironmentBlock(env_block);
getchar();
}