Я интегрирую третье лицо SDK на базе С в мое приложение.NET. Приложение будет работать как служба Windows на сервере, таким образом, оно не должно будет взаимодействовать с пользователем всегда.
К сожалению, в определенных состояниях ошибки это настаивает на том, чтобы называть MessageBoxA, по-видимому, сообщать, что что-то плохо произошло. Когда это происходит, сервис прекращает отвечать. Я предполагаю, что это ожидает кого-то для нажатия Ok?
Не возможно сделать, чтобы поставщик изменил их код для меня.
Существует ли способ, которым я могу выполнить этот вызов в не, таким образом, мой код может справиться с ситуацией автоматически?
Править: Может быть важно упомянуть, что в моем особом случае сервис автоматически перезапустил бы, если бы это отказало. Корректным (как возможное) и внезапный выход является, вероятно, лучшее разрешение для ситуации, где MessageBox отображен в моем случае.
Проверьте Объекты из исследования Microsoft . Это позволяет вам организовать произвольные функции API Windows. Программирование C / C ++ требуется, чтобы он работал. Вам не понадобится много.
Вы можете использовать редактор, чтобы найти местоположение этого и удалить вызов из их двоичного. Но это может быть или не может быть допустимым под ограничениями использования с помощью программного обеспечения. Конечно, если вы перераспределите его, это может вызвать проблемы - вы должны спросить поставщику и сообщить об этом как дефект и свидетельствовать о том, чтобы у вас был обходной путь для вашего собственного использования.
Для людей, которые делали такие вещи (крекинговые лицензии или другие обратные машины), это довольно просто, но реальный вопрос в том, что происходит, если он игнорируется - это все еще продолжать работать?
Это не очень легко. Я бы подумал, что единственный способ - написать крючок для ловушки сообщений, закачиваемых через все петли сообщений Windows в системе. Но я даже не уверен, что услуга может создать крючок сообщения, у которого нет доступа к окна по умолчанию под ее учетными данными по умолчанию (LocalSystem). Так что задача # можно было бы увидеть, если это на самом деле будет работать.
Но вот грубый эскиз того, как я бы попытался сделать это вне сервисного контекста, и вы можете увидеть, применяется ли он:
Это все очень удивление ума, но это путь, который похоже, у него есть какие-либо шансы для меня.