Я предполагаю, что у вас есть скрипт ruby, который запускает программу установки EXE (с помощью вызова system
или аналогичного), и программа установки открывает всплывающее сообщение, которое не может быть подавлено, и запрещает сценарию продолжать .
Если это так, то вы можете использовать ruby Win32 API для вызова таких функций, как EnumWindows и CloseWindow . Конечно, их нужно будет запускать одновременно с установщиком (но, возможно, обязательно в отдельном процессе, в зависимости от деталей реализации потоков в ruby / win32), и ему нужно знать, как определить правильное окно сообщения, прежде чем пытаться закрыть его. .
Вот как я могу это взломать. Напишите отдельную программу с именем «CloseMsgBox.exe», которая принимает один аргумент командной строки, который является заголовком MessageBox, который он закрывает; программа будет периодически вызывать EnumWindows с функцией обратного вызова, которая вызывает GetWindowText , пока не найдет целевой заголовок и не закроет окно через CloseWindow. Внешний сценарий Ruby сначала запускает эту программу в отдельном потоке через вызов system
(или popen
и т. Д.), А затем exec
установщик. Как только установщик откроет окно сообщения, программа CloseMsgBox закроет его, поэтому установщик завершит работу, закроет CloseMsgBox и завершит работу внешнего сценария Ruby.