У меня проблема с программой на C, работающей в Windows XP, которая выдает ошибки Permission Denied (EACCES) при попытке вызвать system ().
Кажется, не имеет значения, что я положил в командную строку, все команды работают вручную, но получают ошибки «Отказано в доступе» при выполнении через system ()
Другая интересная вещь заключается в том, что программа корректно работает на других компьютерах с XP, но не на этой. Это создает ощущение какой-то настройки ОС, но я не совсем уверен, что system () делает под капотом, и хотел бы понять, что здесь происходит.
Вот мой тестовый код:
fprintf( stderr, "DEBUG: Running test of system(NULL) call...\n" );
if ( ( ret = system( NULL ) ) != 0)
fprintf( stderr, " DEBUG: ret: %d: errno: %d, %s\n", ret, errno, strerror( errno ) );
fprintf( stderr, "DEBUG: Running test of system(\"sleep 1\") call...\n" );
if ( ( ret = system( "sleep 1" ) ) != 0 )
fprintf( stderr, " DEBUG: ret: %d: errno: %d, %s\n", ret, errno, strerror( errno ) );
Это выдает
DEBUG: Running test of system(NULL) call...
DEBUG: ret: 1: errno: 0, No error
DEBUG: Running Test of system("sleep 1") call...
DEBUG: ret: -1: errno: 13, Permission denied
Спасибо.
ОБНОВЛЕНИЕ: Я также изменил свой код, чтобы использовать CreateProcess () вместо system (), и я все еще получаю ошибку «Отказано в доступе» (5). Это делает его еще более похожим на настройку ОС, но я не знаю, где искать.
ОБНОВЛЕНИЕ2: Монитор процессов показывает ошибку при вызове «QueryOpen» для пути «D: \ cmd.exe», который не существует. Все остальные вызовы для C: \ WINDOWS \ system32 \ cmd.exe, поэтому я не знаю, почему один вызов плохой.