Доустановка 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, вроде работало.



Поделитесь своим мнением


Я не робот.