SEHException из приложений на сопоставленном ресурсе - PullRequest
3 голосов
/ 02 декабря 2008

Фон

Мы запускаем все наши приложения Windows Form из общей папки Windows (UNC), сопоставленной локально с W-диском пользователя. У нас были проблемы с подключением в последние несколько дней, и мы получаем System.Runtime.InteropServices.SEHException из нескольких случайных мест в наших программах после того, как они работают от нескольких минут до нескольких часов.

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

Вопросы

Windows формирует приложение с задержкой загрузки ресурсов из exe-файла?

Если так, то есть ли способ заставить их загружаться раньше? или перезагрузить их после того, как они потерпят неудачу?

Есть какие-нибудь идеи или предложения по запуску приложений Windows Forms из общего сетевого ресурса? Помимо очевидного «копирования файлов на локальный компьютер» боссом эта идея не нравится.

Ответы [ 2 ]

2 голосов
/ 03 декабря 2008

У меня нет убедительных доказательств этого, но стандартная практика MSFT - использовать файлы с отображением в памяти. В Rotor множество вызовов CreateFileMapping (). Очень эффективно для файлов, доступных только для чтения, таких как сборки, страницы памяти не должны поддерживаться файлом подкачки.

Но он попадает в вентилятор, когда диспетчеру памяти Windows необходимо поменять страницы, и файл стал недоступен. Это очень хорошо подходит для вашего наблюдения. Для этого нет обходного пути, кроме того, что ваш начальник согласен с его предпочтениями и приобретает более надежное сетевое оборудование. MTBF часов довольно плохой.

0 голосов
/ 03 декабря 2008

Если у вас есть доступ к клиентским машинам, вы можете открыть Администрирование и перейти к Microsoft .NET Framework Configuration, чтобы определить пользовательский набор разрешений для вашего приложения. Для получения дополнительной информации см. в этой статье в ID Automation.

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

Другой вариант - открыть настройки зон безопасности в Internet Explorer и добавить файл: // путь к общему ресурсу в зону локальной интрасети, чтобы у него были большие разрешения, например: добавить файл: // имя_сервера / имя_сервера в зону локальной интрасети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...