Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: avc от 29-03-2016, 21:35:58

Название: Не публикуйте bundle в архиве ZIP
Отправлено: avc от 29-03-2016, 21:35:58
Поделюсь с публикой решением странной проблемы. Ситуация такая. Шлю пользователям свежие версии плагинов в виде bundle в архиве zip. Все было прекрасно, пока сегодня у одного американца на двух компьютерах сразу новая  версия не заработала. Кнопочки в Автокаде проявляются, плагин вроде загружен, но команды не работают, т.е. моя дот-нэт dll не загружается. И проблема нигде больше не воспроизводится. Не буду описывать, сколько я бился о стену и сколько мучил пользователя. Но выяснилось, что и _Netload старую версию грузит, а на новую  выдает вот такой перл:
Цитировать
Cannot load assembly. Error details: System.IO.FileLoadException: Could not load file or assembly 'file:///C:\Users\.....dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)
File name: 'file:///C:\.......dll' ---> System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.
Много слов, мало смысла. А по ссылке еще круче. Там все про версии дот-нэта, но все мои перекомпиляции ни к чему не привели. Советуют еще куда-то записать <loadFromRemoteSources enabled="true|false"/>, но не сознаются куда именно.
Короче оказалось вот что. Если нам не повезло с пользователем, и он скачал zip с помощью IE или Edge, то эти твари влезают в архив и модифицируют dll! Где-то ставится метка, что файл из интернета и выполнять его ни в коем случае нельзя. Сколько не разархивируй, не копируй из папки в папку - dll испорчена.
Решение очевидно: не пользоваться говнобраузерами от мелкомягких архивировать 7z, о котором мелкомягкие не знают или ставить пароль на архив. Те же самые dll из архива 7z прекрасно запускаются из под Автокада.
Можно было бы делать каждый раз самопальный инсталлятор. Но msi (без цифровой подписи) выкачать через IE - тоже задачка не для слабаков. Потому и использую простые архивы.
Есть шанс, что если dll у нас подписанные, то может и будут запускаться, но не факт. Мне проверить не на чем.
Название: Re: Не публикуйте bundle в архиве ZIP
Отправлено: Александр Пекшев aka Modis от 29-03-2016, 22:49:59
Вообще-то решение намного проще) Отредактировать файл acad.exe.config (о чем вам и написано в ошибке)
Извините, вам запрещён просмотр содержимого спойлеров.

И вот ссылки на MSDN - https://msdn.microsoft.com/ru-ru/library/0kk0kk35(v=vs.100).aspx (http://тыц), https://msdn.microsoft.com/ru-ru/library/1fk1t1t0(v=vs.110).aspx (http://тыц)
Название: Re: Не публикуйте bundle в архиве ZIP
Отправлено: avc от 29-03-2016, 23:25:59
Вообще-то решение намного проще
Неее, это с нашей колокольни проще, но пользователю я б такое даже не стал пытаться предлагать.
А вот один из пытливых пользователей обнаружил, что оказывается в свойствах ZIP файла при некоторых обстоятельствах может появиться длинный текст о закачке файла с интернета и галочка "разблокировать". Вот это уже можно советовать пользователям. Хотя у меня не появляется. Может это UAC пишет?
Название: Re: Не публикуйте bundle в архиве ZIP
Отправлено: Александр Ривилис от 29-03-2016, 23:41:44
avc
А ведь мы это уже обсуждали на форуме. И неоднократно. Например: http://adn-cis.org/forum/index.php?topic=3196.msg13094#msg13094
Название: Re: Не публикуйте bundle в архиве ZIP
Отправлено: avc от 30-03-2016, 00:03:36
Дааааа, ошибочка та самая. Странно что поиском не нашел ту тему.... Посыпаю голову пеплом... Удалить тему? Хотя я нашел неописанный ранее вариант с защитой от этой гадости другим архиватором.
Название: Re: Не публикуйте bundle в архиве ZIP
Отправлено: Андрей Бушман от 30-03-2016, 00:55:27
А ведь мы это уже обсуждали на форуме.
А ещё раньше писали об этом в блогах (http://bushman-andrey.blogspot.ru/2013/11/autocad.html):
Цитата: Андрей Бушман
Дело в том, что  .NET файлы DLL и EXE могут быть заблокированными. Эту блокировку принудительно устанавливают различные программы, посредством которых происходит передача указанных файлов по сети. Например, нередко таким поведением "страдают" браузеры, почтовые клиенты, а так же Skype. Получив по сети исполняемый файл или библиотеку, написанные на .NET, обязательно проверьте (http://msdn.microsoft.com/en-us/library/ee890038%28v=vs.110%29.aspx) их на предмет блокировки. Если файлы заблокированы - разблокируйте их.
Хотя я нашел неописанный ранее вариант с защитой от этой гадости другим архиватором.
Переименуй расширение отправляемого файла архива и будет тебе счастье. Клиент, получив "бандероль", переименует обратно - никакие галочки снимать не придётся.
Название: Re: Не публикуйте bundle в архиве ZIP
Отправлено: Александр Ривилис от 30-03-2016, 09:59:24
Удалить тему? Хотя я нашел неописанный ранее вариант с защитой от этой гадости другим архиватором.
Оставим. Смысла удалять не вижу.
А вот один из пытливых пользователей обнаружил, что оказывается в свойствах ZIP файла при некоторых обстоятельствах может появиться длинный текст о закачке файла с интернета и галочка "разблокировать".
Свойство прописывается не в сам файл архива (или exe, dll, и т.д.) а в потоки файловой системы NTFS (на FAT/FAT32 не работает): https://support.microsoft.com/ru-ru/kb/883260