Jump to content

Загрузка .NET DLL из сети


Recommended Posts

Всех приветствую!

Знаю, что нельзя из сети загружать библиотеки DLL, посему у меня это сделано так:

  1. В автозагрузку включён LSP следующего содержания:
    (vl-load-com)
    (setq fnlocal "C:/Users/XXXX/AppData/Roaming/Nanosoft/nanoCAD x64 Plus 20.1/PlaneObjects.dll")
    (setq fnserver "Z:/XXXX/NC20.1/AMD64/PlaneObjects.dll")
    (if (/= (findfile fnserver) nil)
      (vl-file-delete fnlocal)
      (alert "file was NOT found")
      )
    (vl-file-copy fnserver fnlocal)
    Из текста следует, что проверив наличие на сервере библиотеки удаляем её локальную копию и создаём новую копию (актуализируем).
    1380300782_.png.fce2680d87c63ab0c816871da4769362.png
  2. Сама библиотека грузится в NC через C:\ProgramData\Nanosoft\nanoCAD x64 Plus 20.1\DataRW\load.config.
    <root>
        <list>
            <module path="C:\Users\XXXX\AppData\Roaming\Nanosoft\nanoCAD x64 Plus 20.1\PlaneObjects.dll"/>
        </list>
    </root>

     

  3. Если локальную копию DLL удалить, то всё прекрасно отрабатывает.
  4. Если локальная копия уже существует, то файл не заменяется. Видимо, поменялся порядок загрузки или что-то ещё - файл уже занят оказывается.

В 10.1 всё работало так. Какие есть предложения? Нужно при каждом запуске обновлять локальную копию, если файл на сервере доступен.

  • Like 1
Link to comment
Share on other sites

Попробуйте грузить модуль из того же лиспа функцией (appload "C:\Users\XXXX\AppData\Roaming\Nanosoft\nanoCAD x64 Plus 20.1\PlaneObjects.dll"), на мой взгляд, так надёжнее и компактнее, чем разделять замену и загрузку.

Link to comment
Share on other sites

Добрый день.

Конечно, создать - обычный текстовый. Кодировка UTF-8, если не ошибаюсь.

Edited by Kreator
  • Like 1
Link to comment
Share on other sites

В 02.07.2020 в 15:02, Kreator сказал:

Из текста следует, что проверив наличие на сервере библиотеки удаляем её локальную копию и создаём новую копию (актуализируем).

Вообще-то, немного не так.

Если есть файл на сервере, то делается попытка  удалить локальный файл, а на его место копируется файл с сервера.

Если файла на сервере нет, то выводится предупреждение и... снова делается попытка копировать несуществующий файл с сервера.

 

Кстати, все эти файловые операции делаются без проверки. И рулит ими операционная система.

Я обычно с опаской отношусь к таким действиям (или свистка не достанется, или акула глухая попадется:draznilka:).

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

 

  • Like 1
  • Thanks 1
Link to comment
Share on other sites

@EdwardSt, ваша правда :) Но такое слежение мне ни к чему - главное, чтобы не удалить локальную копию при неимении копии на сервере. По уму, конечно, нужно сначала скопировать с сервера файл с другим именем, при успехе переименовать старый в .old, переименовать новый в старый. Но "и так сойдёт", отдаюсь на произвол судьбы винды :D

добавлено через 1 минуту

На самом деле, лисп не люблю, поэтому ленюсь его трогать :264655198_ura(1):

Link to comment
Share on other sites

Добрый день. Не подскажите.

В локальный файл cfg.ini (по пути C:\Users\Пользователь\AppData\Roaming\Nanosoft\nanoCAD x64 Plus 20.0\Config\) добавляем строки:

 

[\Configuration\<<Default>>\Appload\Startup\app0]   

Loader=s\\10.120.11.34\Software\SAPR_SOFT\ПО для nanoCAD\СНОС\SNOS\dllcopy.lsp

Type=sLISP

Enabled=i1

[\Configuration\<<Default>>\Appload\Startup\app1]   

Loader=s\\10.120.11.34\Software\SAPR_SOFT\ПО для nanoCAD\СНОС\SNOS\SNOS.nsf

Type=sNSF

Enabled=i1

 

Необходимо, чтобы у пользователей эти строки после установки в файле cfg.ini появлялись автоматически.

Если мы в сетевую развертку в папку NanoCAD20_Plus_X64\LocalEx\Program\UserDataCache\Config добавим измененный файл cfg.ini, в локальной папке пользователя после установки будет измененный файл из сетевой развертки или добавлять  строки (подменять файл) нужно будет вручную каждому пользователю?

Link to comment
Share on other sites

Содержимое UserDataCache копируется каждому пользователю в AppData при первом старте, так что модифицированный cfg.ini попадёт куда нужно.

Link to comment
Share on other sites

  • 1 month later...

Вот теперь я вспомнил, зачем сунул загрузку DLL в load.config.

Если NC не запущен, то при открытии файла DWG с пользовательскими объектами DLL загружается после чертежа, и все объекты отображаются как прокси. Нужно сначала запускать NC с пустым чертежом, а потом открывать файл, тогда всё работает. Мелочь, но немного достаёт, с учётом того, что прокси не правильно отрабатывает цвета отдельных примитивов внутри объекта, если библиотеки нет.

  • Like 1
Link to comment
Share on other sites

В 19.08.2020 в 12:07, Kreator сказал:

Нужно сначала запускать NC с пустым чертежом, а потом открывать файл, тогда всё работает.

Кстати, я для себя это взял за правило.

Чтобы исключить двойственность в поведении программы при разных сценариях запуска.

Вроде привык)

 

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...