Страницы

Нерабочий int system(const char *command) в Windows

Windows не перестает неприятно удивлять в неожиданных местах. У разработчицы нашей двухплатформенной библиотеки без видимых причин перестала работать функция system(), являющейся частью стандарта ANSI C и занимающейся запуском внешних программ. Функция одинаково хорошо не работала что после сборки с помощью mingw gcc, что после сборки в Visual Studio.

Разработчица уже хотела "решить" проблему привычным способом - переустановкой Windows, но я обратил внимание, что ни одно приложение кроме нашего не пострадало - любой файловый менеджер успешно запускал программы, да и mingw make и gcc, делающие во время работы уйму внешних запусков, работали исправно. Полагаю, что для других разработчиков такое поведение функции system() в качественной коммерческой операционной системе не является сюрпризом. Конечно же нет никаких гарантий, что у других пользователей эта функция будет работать исправно. Поэтому я добавил в библиотеку функцию-обертку для запуска внешних программ, в Windows вызывающей CreateProcesss(). Проблема исчезла.

Обновление:
Позже выяснилось, что вызов system() сбоил из-за испорченного содержания переменной окружения ComSpec, которая должна содержать полное имя командного интерпретатора.

Комментариев нет:

Отправить комментарий