
У нас есть исполняемый файл .Net 4.0 (MyProg.exe) и связанные с ними библиотеки DLL, которые развернуты на сетевом ресурсе с помощью XCopy. MyProg.exe и его библиотеки DLL не имеют подписи.
Мы установили их на сетевом ресурсе, чтобы несколько пользователей могли использовать одну и ту же версию программы и чтобы упростить обновление программы. Это хорошо работало для многих наших клиентов в течение многих лет.
Для недавнего клиента папка на виртуальной машине Windows Server 2012 является общей сетевой папкой. Пользователи запускают программу с другого терминального сервера (Windows Server 2012).
Когда мы обновилиMyProg.exe(до версии 2.0 с 1.0), терминальный сервер не запускает новый исполняемый файл, пока не будет перезапущен. Он продолжает загружать версию 1.0, даже если этот exe больше не доступен. Похоже, что он запускает кэшированную версиюMyProg.exe V1.0.
- Действия, которые я попробовал:
- Закрыть все экземпляры программы
- Скопировать новыйMyProg.exeв папку и перезаписать файлы (Обновлена версия exe с 1.0 до 2.0)
- Проверьте версию 2.0MyProg.exeиз его Свойства >> Страница сведений как с файлового сервера, так и с терминального сервера
- Убедитесь, чтоMyProg.exe V2.0запускается при запуске с файлового сервера с использованием файла ярлыка (цель:\\Сервер\MyProg\MyProg.exe)
- Запустите тот же файл ярлыка (цель:\\Сервер\MyProg\MyProg.exe) с терминального сервера иMyProg.exe V1.0начинается
- Переименовать\\Сервер\МояПрогак\\Сервер\МояПрог1и убедитесь, что терминальный сервер не может запустить ярлык, поскольку эта папка больше не существует.
- Создайте новый файл ярлыка (Цель:\\Сервер\MyProg1\MyProg.exe) и подтверждаем, чтоMyProg.exe V2.0работает на клиенте
- Переименовать папку\\Сервер\MyProg1вернуться к\\Сервер\МояПрогаи запуск оригинального файла ярлыка продолжает загрузкуMyProg.exe V1.0до перезапуска терминального сервера.
- Я проверил, что автономные файлы отключены на терминальном сервере.
- Я проверил, что не могу перезаписать исполняемый файл MyProg.exe, когда программа запущена на терминальном сервере.
Что еще я могу проверить, чтобы устранить неполадки, из-за которых старая версия исполняемого файла запускается, даже если этот файл больше не существует?
решение1
Связался с командой технической поддержки Microsoft. Они сказали, что это может быть вызвано этими настройками SMB. Мы изменили эти настройки и сохраним информацию во время следующего обновления.
http://technet.microsoft.com/en-us/library/ff686200(v=WS.10).aspx
Настройки по ссылке выше не сработали.
Подробнее, что помогло нам разобраться в проблеме:Клиентский компьютер — это терминальный сервер Windows.
В этой статье базы знаний приведена дополнительная информация по этому вопросу:
https://support.microsoft.com/kb/2536487
Приложения могут аварийно завершить работу или перестать отвечать, если другой пользователь выйдет из сеанса удаленного рабочего стола в Windows Server 2008 или Windows Server 2008 R2
Симптомы:
При запуске приложения с сопоставленного диска приложение может перестать отвечать или аварийно завершить работу для пользователя (или нескольких пользователей), когда другой пользователь выходит из системы. Например:
- Один сервер является файловым сервером, а другой — сервером удаленного узла сеансов (терминальным сервером).
- Папка на файловом сервере отображается для использования удаленными пользователями, подключающимися к серверу RDS.
- Приложение на сопоставленном ресурсе запускается несколькими пользователями.
- Один пользователь выходит из системы, и это приводит к сбою приложения или его зависанию у других пользователей.
В частности, поведение возникает, когда первый или последний пользователь приложения выходит из системы, в зависимости от версии. Windows Server 2008 будет испытывать эту проблему, когда первый пользователь выходит из системы; Windows Server 2008 R2 будет испытывать эту проблему, когда последний пользователь выходит из системы.
Причина:
Это происходит из-за способа, которым редиректор обрабатывает FCB (блок управления файлом) для рассматриваемого двоичного файла. В Windows Server 2008 FCB принадлежит пользователю, который первым открыл файл, и этот FCB используется последующими пользователями. Когда первый пользователь выходит из системы, FCB становится неактивным, что приводит к сбою или неотзывчивости последующих пользователей приложения. В Windows Server 2008 R2 FCB принадлежит последнему пользователю, открывшему файл, и предыдущие пользователи сталкиваются с этой проблемой, если последний пользователь выходит из системы
Обходной путь:
Установите приложение локально на терминальном сервере, а не на сетевом ресурсе.