Сервер RDP, предоставляющий C0000006 для прикладных программ

В последнее время наш RDP-сервер испытывает некоторые проблемы.

Удаленные пользователи будут использовать RDP-сервер для подключения к серверу приложений, в то время как находящиеся в здании пользователи будут подключаться непосредственно к серверу приложений.

В последнее время проблема заключается в том, что удаленные пользователи, использующие RDP-сервер для подключения к серверу приложений, получат ошибку внешнего исключения C0000006. Когда первый пользователь получит эту ошибку, ошибка будет медленно распространяться среди пользователей, пока все, кто использует Программу № 1 и Программу № 2, не получат ошибку C0000006. Перезагрузка RDP-сервера устраняет проблему в большинстве случаев.

Я не уверен, в чем заключается проблема, которая могла бы вызвать ошибку C0000006 для этих двух Программ (они разговаривают друг с другом), но обычно первыми предвестниками этого появления пользователей являются Программа № 1 и Программа № 2. пусто в диспетчере задач примерно так:

Я знаю, что это длинный выстрел, но есть идеи, что может быть причиной этого? Похоже, связь между сервером RDP и сервером приложений. ИТ-специалистам хотелось бы решить эту проблему с нашей стороны, но если это на самом деле ошибка программирования, то это исправление программирования стороннего консультанта, и оно должно быть им устранено.

1 ответ

Ошибки 0xC0000006 возникают, когда ваша программа отправляет на страницу больше данных для EXE в память, но не может. Обычно это вызвано проблемой ввода-вывода при попытке чтения данных.

Поэтому убедитесь, что связь между сервером приложений и сервером RDP стабильна и что хранилище на сервере приложений отвечает и быстро отправляет данные. По сути, вы не хотите никаких неожиданных отбрасываний или длительных задержек при поступлении данных на сервер RDP.

Другой вариант (или дополнительное действие), поскольку, судя по значку, показанному на скриншоте, состоит в том, что, поскольку приложение написано на Delphi, его можно перекомпилировать, чтобы включить заголовок, который скажет Windows загрузить всю программу в память сразу, избегая необходимости постраничного ввода данных позже, таким образом избегая ошибки...

{$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP}

И убедитесь, что Winapi.Windows входит в Uses раздел.

Первый флаг указывает, что он должен полностью загружаться в память, если программа находится на съемном носителе (то есть на флеш-диске), а второй - делать это, если программа находится на сетевом ресурсе (как, вероятно, у вас).

Более подробная информация доступна на StakcOverflow:

Другие вопросы по тегам