Как я могу препятствовать тому, чтобы сторонняя библиотека отобразила MessageBox?

Я интегрирую третье лицо SDK на базе С в мое приложение.NET. Приложение будет работать как служба Windows на сервере, таким образом, оно не должно будет взаимодействовать с пользователем всегда.

К сожалению, в определенных состояниях ошибки это настаивает на том, чтобы называть MessageBoxA, по-видимому, сообщать, что что-то плохо произошло. Когда это происходит, сервис прекращает отвечать. Я предполагаю, что это ожидает кого-то для нажатия Ok?

Не возможно сделать, чтобы поставщик изменил их код для меня.

Существует ли способ, которым я могу выполнить этот вызов в не, таким образом, мой код может справиться с ситуацией автоматически?

Править: Может быть важно упомянуть, что в моем особом случае сервис автоматически перезапустил бы, если бы это отказало. Корректным (как возможное) и внезапный выход является, вероятно, лучшее разрешение для ситуации, где MessageBox отображен в моем случае.

16
задан Thomas Bonini 22 February 2010 в 16:38
поделиться

3 ответа

Проверьте Объекты из исследования Microsoft . Это позволяет вам организовать произвольные функции API Windows. Программирование C / C ++ требуется, чтобы он работал. Вам не понадобится много.

10
ответ дан 30 November 2019 в 23:00
поделиться

Вы можете использовать редактор, чтобы найти местоположение этого и удалить вызов из их двоичного. Но это может быть или не может быть допустимым под ограничениями использования с помощью программного обеспечения. Конечно, если вы перераспределите его, это может вызвать проблемы - вы должны спросить поставщику и сообщить об этом как дефект и свидетельствовать о том, чтобы у вас был обходной путь для вашего собственного использования.

Для людей, которые делали такие вещи (крекинговые лицензии или другие обратные машины), это довольно просто, но реальный вопрос в том, что происходит, если он игнорируется - это все еще продолжать работать?

3
ответ дан 30 November 2019 в 23:00
поделиться

Это не очень легко. Я бы подумал, что единственный способ - написать крючок для ловушки сообщений, закачиваемых через все петли сообщений Windows в системе. Но я даже не уверен, что услуга может создать крючок сообщения, у которого нет доступа к окна по умолчанию под ее учетными данными по умолчанию (LocalSystem). Так что задача # можно было бы увидеть, если это на самом деле будет работать.

Но вот грубый эскиз того, как я бы попытался сделать это вне сервисного контекста, и вы можете увидеть, применяется ли он:

  1. Создать Windows Крюк для ловушки сообщений из всех сообщений Windows очереди на системе.
  2. Вставьте все сообщения WM_CREATE и проциклируйте параметр Createstrouct для сообщений, которые могут быть исходящими из вашей сторонней библиотеки. Возможно, вам придется регистрировать все сообщения WM_CREATE, а затем проанализировать данные, чтобы увидеть, как вы можете различить диалоговое окно вашей библиотеки из любого другого диалогового окна в системе. (Много раз участник «LPSZName» отличается между реализациями диалога.)
  3. Если вы считаете, что конкретный WM_CREATE произошел из вашей библиотеки, возвращает «обрабатываемый» ответ от вашего крюка сообщений и не вызывайте следующий обработчик сообщений в цепочке Отказ

Это все очень удивление ума, но это путь, который похоже, у него есть какие-либо шансы для меня.

0
ответ дан 30 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: