Доустановка ExpressTools
Что-то в последнее время несколько раз мелькали вопросы "как доустановить Express Tools в AutoCAD?" Не спорю, решение "запустить установку" или "загрузить вручную" прямо так и просится. А если пользователей больше чем 3?
В общем, появился такой вот код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | (vl-load-com) (defun autoload-et (/ _kpblc-dir-create net_et_path loc_et_path menu_lst secureload) (defun _kpblc-dir-create (path / tmp) ;| * Гарантированное создание каталога. * Параметры вызова: path создаваемый каталог |; (cond ((vl-file-directory-p path) path) ((setq tmp (_kpblc-dir-create (vl-filename-directory path))) (vl-mkdir (strcat tmp "\" (vl-filename-base path) (cond ((vl-filename-extension path)) (t "") ) ;_ end of cond ) ;_ end of strcat ) ;_ end of vl-mkdir (if (vl-file-directory-p path) path ) ;_ end of if ) ) ;_ end of cond ) ;_ end of defun (setq net_et_path "C:\\Autodesk\\AutoCAD_2014_English_Win_32bit_dlm\\x86\\acad\\Program Files\\Root\\Express" ) ;_ end of setq (if (not (member "ACETTEST" (mapcar (function (lambda (x) (strcase (vl-filename-base x)))) (atoms-family 1))) ) ;_ end of not (progn ;; Не загружен. Берем все из серверного каталога и копируем в %AppData%/Autodesk/ExpressTools (setq loc_et_path (_kpblc-dir-create (strcat (vl-string-right-trim "\" (getenv "appdata")) "\\Autodesk\" (vl-registry-read (strcat "HKEY_LOCAL_MACHINE\" (vlax-product-key)) "ProductName") ;; (vl-string-trim "VISUALP " (strcase ver)) "\\Express" ) ;_ end of strcat ) ;_ end of _kpblc-dir-create ) ;_ end of setq (foreach file (vl-remove-if (function (lambda (x) (vl-file-directory-p x))) (vl-directory-files net_et_path "*.*") ) ;_ end of vl-remove-if (vl-file-copy (strcat (vl-string-right-trim "\" net_et_path) "\" (vl-filename-base file) (vl-filename-extension file) ) ;_ end of strcat (strcat loc_et_path "\" (vl-filename-base file) (vl-filename-extension file)) ) ;_ end of vl-file-copy ) ;_ end of foreach (if (not (wcmatch (strcase (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))) (strcat "*" (strcase loc_et_path) "*") ) ;_ end of WCMATCH ) ;_ end of not (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) (strcat (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))) ";" loc_et_path ) ;_ end of strcat ) ;_ end of vla-put-SupportPath ) ;_ end of if (if (setq secureload (getvar "secureload")) (setvar "secureload" 0) ) ;_ end of if (if (getvar "trustedpaths") (setvar "trustedpaths" (strcat (vl-string-trim ";" (getvar "trustedpaths")) ";" loc_et_path "\\...") ) ;_ end of setvar ) ;_ end of if (load "acettest.fas" "Can't find acettest.fas!") (if secureload (setvar "secureload" secureload) ) ;_ end of if ) ;_ end of progn ) ;_ end of if ) ;_ end of defun (autoload-et) |
Общая технология проста: где-то "на сервере" присутствуют распакованные ExpressTools (путь хранится в переменной net_et_path; я при тесте просто взял дистрибутив 32-разрядного AutoCAD 2014 и с ним экспериментировал). Потом код создает в %AppData% отдельный каталог для ET текущей версии AutoCAD, копирует туда все файлы и запускает единственный acettest.fas. Ну, по ходу дела обходим вопросы безопасности
P.S. Код проверял только на AutoCAD 2014 x32, вроде работало.