This doesn't sound like an "out of memory" situation.
Yes, that can happen, but it is unlikely upon startup.
# $command_a should be the full path name
# of the executable file.
# $command_b should be the actual command.
Your code:
$ppc = Win32::Process::Create(
$process,
$command_a, #better? $full_path_to_cmd_exe
$command_b, #better? $cmd_with_args
0,
NORMAL_PRIORITY_CLASS,
'.'
);
Example from Win32::Process:
$ppc = Win32::Process::Create(
$ProcessObj,
"C:/winnt/system32/notepad.exe",
"notepad temp.txt",
0,
NORMAL_PRIORITY_CLASS,
"."
);