Просьба протестировать функцию
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Просьба протестировать функцию

Просьба протестировать функцию

Ответ
Поиск в этой теме
Непрочитано 15.05.2007, 09:11 #1
Просьба протестировать функцию
ShaggyDoc
 
Thượng Tá Quân Đội Nhân Dân Việt Nam
 
44d32'44"С, 33d26'51"В
Регистрация: 14.03.2005
Сообщений: 13,372

Есть подозрения на ужасный глюк AutoCAD. Вопрос в том, или это для версии, для экземпляра и т.п.

Прошу отчаянных добровольцев проверить этот код:

Код:
[Выделить все]
(defun test_path (/ support_path)
  (print (getvar "ACADVER"))
  (print (setq support_path (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))))
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) (strcat "C:\\XXX\\;" support_path))
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) support_path)      
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))
)
(test_path)
Просто скопируйте в редактор VL и отправьте код на выполнение. В результате должны напечататься 4 строки, которые надо вставить в ответ.

Это не больно, ваши Автокады не пострадают. Для вас это ничего не значит, а для меня поддержка в жизни.
Просмотров: 7089
 
Непрочитано 15.05.2007, 09:19
#2
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
"17.0s (LMS Tech)"
"C:\\Documents and Settings\\Admin\\Application Data\\Autodesk\\AutoCAD 2007\\R17.0\\enu\\support;C:\\Program Files\\AutoCAD 2007\\support;C:\\Program Files\\AutoCAD 2007\\fonts;C:\\Program Files\\AutoCAD 2007\\help;C:\\Program Files\\AutoCAD 2007\\express;C:\\Program Files\\AutoCAD 2007\\support\\color;D:\\Library\\Parameters\\Blocks;D:\\Library\\Parameters\\Font;D:\\Library\\Parameters\\Icons;D:\\Library\\Parameters\\Library_Type;D:\\Library\\Parameters\\Lisp;D:\\Library\\Parameters\\Lisp\\PlineModify;D:\\Library\\Parameters\\Palette;D:\\Library\\Parameters\\Table;D:\\Dokuments\\Sergei\\AutoCAD\\LISP\\Weld\\VLX"
"C:\\Documents and Settings\\Admin\\Application Data\\Autodesk\\AutoCAD 2007\\R17.0\\enu\\support;C:\\Program Files\\AutoCAD 2007\\support;C:\\Program Files\\AutoCAD 2007\\fonts;C:\\Program Files\\AutoCAD 2007\\help;C:\\Program Files\\AutoCAD 2007\\express;C:\\Program Files\\AutoCAD 2007\\support\\color;D:\\Library\\Parameters\\Blocks;D:\\Library\\Parameters\\Font;D:\\Library\\Parameters\\Icons;D:\\Library\\Parameters\\Library_Type;D:\\Library\\Parameters\\Lisp;D:\\Library\\Parameters\\Lisp\\PlineModify;D:\\Library\\Parameters\\Palette;D:\\Library\\Parameters\\Table;D:\\Dokuments\\Sergei\\AutoCAD\\LISP\\Weld\\VLX"
"C:\\Documents and Settings\\Admin\\Application Data\\Autodesk\\AutoCAD 2007\\R17.0\\enu\\support;C:\\Program Files\\AutoCAD 2007\\support;C:\\Program Files\\AutoCAD 2007\\fonts;C:\\Program Files\\AutoCAD 2007\\help;C:\\Program Files\\AutoCAD 2007\\express;C:\\Program Files\\AutoCAD 2007\\support\\color;D:\\Library\\Parameters\\Blocks;D:\\Library\\Parameters\\Font;D:\\Library\\Parameters\\Icons;D:\\Library\\Parameters\\Library_Type;D:\\Library\\Parameters\\Lisp;D:\\Library\\Parameters\\Lisp\\PlineModify;D:\\Library\\Parameters\\Palette;D:\\Library\\Parameters\\Table;D:\\Dokuments\\Sergei\\AutoCAD\\LISP\\Weld\\VLX"
ACAD2007
Krieger вне форума  
 
Непрочитано 15.05.2007, 09:24
#3
shnn

Инженер
 
Регистрация: 18.02.2005
Самара
Сообщений: 747


Цитата:
Command: (test_path)
"16.1s (LMS Tech)"
"C:\\Mok\\A2005\\Fonts;C:\\Mok\\A2005;C:\\Mok\\;C:\\Mok\\lw;C:\\Mok\\A2005\\enu\
\Support;C:\\Mok\\A2005\\Express;C:\\Program Files\\AutoCAD
2005\\help;C:\\Program Files\\AutoCAD 2005\\support\\color"
"C:\\Mok\\A2005\\Fonts;C:\\Mok\\A2005;C:\\Mok\\;C:\\Mok\\lw;C:\\Mok\\A2005\\enu\
\Support;C:\\Mok\\A2005\\Express;C:\\Program Files\\AutoCAD
2005\\help;C:\\Program Files\\AutoCAD 2005\\support\\color"
"C:\\Mok\\A2005\\Fonts;C:\\Mok\\A2005;C:\\Mok\\;C:\\Mok\\lw;C:\\Mok\\A2005\\enu\
\Support;C:\\Mok\\A2005\\Express;C:\\Program Files\\AutoCAD
2005\\help;C:\\Program Files\\AutoCAD 2005\\support\\color"
"C:\\Mok\\A2005\\Fonts;C:\\Mok\\A2005;C:\\Mok\\;C:\\Mok\\lw;C:\\Mok\\A2005\\enu\
\Support;C:\\Mok\\A2005\\Express;C:\\Program Files\\AutoCAD
2005\\help;C:\\Program Files\\AutoCAD 2005\\support\\color"
AutoCAD 2005
shnn вне форума  
 
Непрочитано 15.05.2007, 09:28
#4
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


AutoCAD 2005 eng
Код:
[Выделить все]
"16.1s (LMS Tech)" 
"C:\\Documents and Settings\\bausk\\Application Data\\Autodesk\\AutoCAD 2005\\R16.1\\enu\\support;C:\\Program Files\\AutoCAD 2005\\support;C:\\Program Files\\AutoCAD 2005\\fonts;C:\\Program Files\\AutoCAD 2005\\help;C:\\Program Files\\AutoCAD 2005\\express;C:\\Program Files\\AutoCAD 2005\\support\\color;C:\\Program Files\\NERL Alto;C:\\Program Files\\NERL Alto\\support" 
"C:\\Documents and Settings\\bausk\\Application Data\\Autodesk\\AutoCAD 2005\\R16.1\\enu\\support;C:\\Program Files\\AutoCAD 2005\\support;C:\\Program Files\\AutoCAD 2005\\fonts;C:\\Program Files\\AutoCAD 2005\\help;C:\\Program Files\\AutoCAD 2005\\express;C:\\Program Files\\AutoCAD 2005\\support\\color;C:\\Program Files\\NERL Alto;C:\\Program Files\\NERL Alto\\support" 
"C:\\Documents and Settings\\bausk\\Application Data\\Autodesk\\AutoCAD 2005\\R16.1\\enu\\support;C:\\Program Files\\AutoCAD 2005\\support;C:\\Program Files\\AutoCAD 2005\\fonts;C:\\Program Files\\AutoCAD 2005\\help;C:\\Program Files\\AutoCAD 2005\\express;C:\\Program Files\\AutoCAD 2005\\support\\color;C:\\Program Files\\NERL Alto;C:\\Program Files\\NERL Alto\\support" "C:\\Documents and Settings\\bausk\\Application Data\\Autodesk\\AutoCAD 2005\\R16.1\\enu\\support;C:\\Program Files\\AutoCAD 2005\\support;C:\\Program Files\\AutoCAD 2005\\fonts;C:\\Program Files\\AutoCAD 2005\\help;C:\\Program Files\\AutoCAD 2005\\express;C:\\Program Files\\AutoCAD 2005\\support\\color;C:\\Program Files\\NERL Alto;C:\\Program Files\\NERL Alto\\support"
Доктор, я смогу ходить?
Александр Бауск вне форума  
 
Непрочитано 15.05.2007, 09:31
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,626


Получил 4 конфиденциальные строки...
Profan вне форума  
 
Автор темы   Непрочитано 15.05.2007, 09:56
#6
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Объясняю, в чем дело.

1. В первой строке теста печатается версия Автокада (чтобы вручную не напрягаться с "конфиденциальностью".

2. Во второй строке функция vla-get-supportpath должна возвращать SupportPath, разделенные ; Эта строка записывается в реестр, а пути отображаются в диалоге Options в Support File Search Path. Мы ее запомнили, чтобы восстановить потом

3. В третьей строке функцией vla-put-supportpath добавляем в начало фиктивный каталог. В этот момент этот каталог добавляется и в реестр и в диалог (проверить можно пошаговым исполнением).

4. В четвертой строке мы читаем с помощью vla-get-supportpath дорожку. А в ней нет добавленного каталога!!!

5. В пятой строке восстанавливаем первоначальный путь - чтобы у тестеров не осталось грязи. А потом еще раз печатаем для проверки.

Пока у всех показывает, что vla-get-supportpath возвращает не все. Причем возвращает не все, даже если Автокад перезагрузить - хотя в реестре и диалоге новый каталог показывается.

Не могу понять в чем дело. Может быть я зациклился на какой-то элементарной ошибке? Натычьте носом.
ShaggyDoc вне форума  
 
Непрочитано 15.05.2007, 09:59
#7
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Получил одну строку:
Цитата:
"16.1s (LMS Tech)" no function definition: VLAX-GET-ACAD-OBJECT
(У меня Acad-2005 eng)
Pilot вне форума  
 
Непрочитано 15.05.2007, 10:24
#8
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Цитата:
Сообщение от ShaggyDoc
Причем возвращает не все, даже если Автокад перезагрузить - хотя в реестре и диалоге новый каталог показывается.
А вот это действительно странно.
У меня какое-то ощущение дежавю, если честно.
Пойду покопаюсь в своем приложении. Я смутно помню, что во время оно здорово намучился с этими путями.
Александр Бауск вне форума  
 
Непрочитано 15.05.2007, 10:28
#9
Геннадий aka PG

Машиностроение, Проектирование
 
Регистрация: 15.09.2003
Москва
Сообщений: 1,113
<phrase 1=


Аналогично, не сохраняется.
а если сделать изменения, выйти из проги, а потом считать другой?
Я к тому что может быть реестр надо "перечитать"

-Читал предыдущие посты невнимательно, каюсь

> PilotПодгрузи (vl-load-com)
__________________
С уважением,
Геннадий aka PG
Геннадий aka PG вне форума  
 
Непрочитано 15.05.2007, 10:29
#10
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


Цитата:
ACAD 2002
"15.06"
"C:\\AutoCAD\\AutoCAD 2002\\support;C:\\AutoCAD\\AutoCAD 2002\\fonts;C:\\AutoCAD\\AutoCAD 2002\\help;
C:\\Program Files\\ToolPac"
Цитата:
ACAD 2006
"16.2s (LMS Tech)"
"C:\\Documents and Settings\\O_Krilov\\Application Data\\Autodesk\\AutoCAD 2006\\R16.2\\enu\\support;
C:\\AutoCAD\\AutoCAD 2006\\support;C:\\AutoCAD\\AutoCAD 2006\\fonts;C:\\AutoCAD\\AutoCAD 2006\\help;
C:\\AutoCAD\\AutoCAD 2006\\Express;C:\\AutoCAD\\AutoCAD 2006\\support\\color"
Цитата:
ACAD 2007
"17.0s (LMS Tech)"
"C:\\Documents and Settings\\O_Krilov\\Application Data\\Autodesk\\AutoCAD
2007\\R17.0\\enu\\support;C:\\AutoCAD\\AutoCAD
2007\\support;C:\\AutoCAD\\AutoCAD 2007\\fonts;C:\\AutoCAD\\AutoCAD
2007\\help;C:\\AutoCAD\\AutoCAD 2007\\Express;C:\\AutoCAD\\AutoCAD
2007\\support\\color"
"C:\\Documents and Settings\\O_Krilov\\Application Data\\Autodesk\\AutoCAD
2007\\R17.0\\enu\\support;C:\\AutoCAD\\AutoCAD
2007\\support;C:\\AutoCAD\\AutoCAD 2007\\fonts;C:\\AutoCAD\\AutoCAD
2007\\help;C:\\AutoCAD\\AutoCAD 2007\\Express;C:\\AutoCAD\\AutoCAD
2007\\support\\color"
"C:\\Documents and Settings\\O_Krilov\\Application Data\\Autodesk\\AutoCAD
2007\\R17.0\\enu\\support;C:\\AutoCAD\\AutoCAD
2007\\support;C:\\AutoCAD\\AutoCAD 2007\\fonts;C:\\AutoCAD\\AutoCAD
2007\\help;C:\\AutoCAD\\AutoCAD 2007\\Express;C:\\AutoCAD\\AutoCAD
2007\\support\\color" "C:\\Documents and Settings\\O_Krilov\\Application
Data\\Autodesk\\AutoCAD 2007\\R17.0\\enu\\support;C:\\AutoCAD\\AutoCAD
2007\\support;C:\\AutoCAD\\AutoCAD 2007\\fonts;C:\\AutoCAD\\AutoCAD
2007\\help;C:\\AutoCAD\\AutoCAD 2007\\Express;C:\\AutoCAD\\AutoCAD
2007\\support\\color"
Запускал функцию из VL-редактора - во всех случаях получал три одинаковые строки. Потом решил в 2007 повторно вручную запустить из командной строки и получил в ответ уже 4 строчки (приведен полный листинг). Дальше интереснее: при запуске из VL-редактора всегда выводит только 3 строки, а командой (test_path) уже 4 строки!
Никак не пойму, откуда эта лишняя строка появляется?
Олег К. вне форума  
 
Непрочитано 15.05.2007, 11:05
#11
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


С лишней строкой так и не разобрался, зато получилось вывести каталог.
Цитата:
"17.0s (LMS Tech)"
"C:\\Documents and Settings\\O_Krilov\\Application Data\\Autodesk\\AutoCAD
2007\\R17.0\\enu\\support;C:\\AutoCAD\\AutoCAD
2007\\support;C:\\AutoCAD\\AutoCAD 2007\\fonts;C:\\AutoCAD\\AutoCAD
2007\\help;C:\\AutoCAD\\AutoCAD 2007\\Express;C:\\AutoCAD\\AutoCAD
2007\\support\\color"
"C:\\ZZZ;C:\\Documents and Settings\\O_Krilov\\Application
Data\\Autodesk\\AutoCAD 2007\\R17.0\\enu\\support;C:\\AutoCAD\\AutoCAD
2007\\support;C:\\AutoCAD\\AutoCAD 2007\\fonts;C:\\AutoCAD\\AutoCAD
2007\\help;C:\\AutoCAD\\AutoCAD 2007\\Express;C:\\AutoCAD\\AutoCAD
2007\\support\\color"
"C:\\Documents and Settings\\O_Krilov\\Application Data\\Autodesk\\AutoCAD
2007\\R17.0\\enu\\support;C:\\AutoCAD\\AutoCAD
2007\\support;C:\\AutoCAD\\AutoCAD 2007\\fonts;C:\\AutoCAD\\AutoCAD
2007\\help;C:\\AutoCAD\\AutoCAD 2007\\Express;C:\\AutoCAD\\AutoCAD
2007\\support\\color"
Для этого немного изменил код
Код:
[Выделить все]
(defun test_path (/ support_path)
  (print (getvar "ACADVER"))
  (print (setq support_path (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))))
  (vl-mkdir "C:\\ZZZ")
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) (strcat "C:\\ZZZ;" support_path))
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) support_path)     
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))
)
(test_path)
И еще. При задании несуществующего каталога в путях поддержки (через Options) выдается сообщение "Path does not exist: C:\ZZZ. Are you sure you want to use this value?". Может как раз в этом все дело.
Олег К. вне форума  
 
Автор темы   Непрочитано 15.05.2007, 11:18
#12
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Несуществующий каталог я просто для примера включил. По идее, несуществующий каталог не должна включать функция vla-put. Но она его принимает, каталог записывается в реестр и появляется в диалоге.

Обязанность get-функции вернуть то, что записано, не умничая. Конечно, для гарантии можно включить и создание каталога.

Однако сталкиваюсь и с ситуациями, когда на другом компьютере не возвращается и имя реально существующего каталога. Нет стабильности, и однозначности, что еще опаснее.

PS - Лишняя строка - это просто результат выполнения всей функции. Один раз печатает print, а последний - результат.
ShaggyDoc вне форума  
 
Непрочитано 15.05.2007, 11:28
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


А если попробовать через (setenv "ACAD")? Пишу с машины без установленного acad, поэтому могу ошибаться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.05.2007, 11:44
#14
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Кулик Алексей aka kpblc
А если попробовать через (setenv "ACAD")? Пишу с машины без установленного acad, поэтому могу ошибаться.
setenv добавляет несуществующий каталог. getenv - не возвращает добавленный несуществующий, возвращает добавленный существующий.

Но дело не в том, как другим путем прочитать. Дело "в прынцыпе".
ShaggyDoc вне форума  
 
Непрочитано 15.05.2007, 12:53
#15
Александр Бауск

FEA/CAD/МКЭ/САПР
 
Регистрация: 20.03.2007
48,38°:35,03°
Сообщений: 1,056
Отправить сообщение для Александр Бауск с помощью Skype™


Цитата:
Нет стабильности, и однозначности, что еще опаснее
Меня такие вещи в Акаде страшно бесят.
Выкладывает, например, кто-нибудь программу на VBA -> не работает -> надо пойти и подлючить какую-нибудь Reference -> Как бы он ее такую конечному пользователю продал бы, интересно?
Александр Бауск вне форума  
 
Автор темы   Непрочитано 15.05.2007, 14:30
#16
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Всех бесят. Но тут есть разные причины:

1. Недоработки со стороны автора - чаще всего. Обычно не со зла, просто автор чего-то не знает. Хотя бывает, что знает, но специально так делает. Обычно это неучет особенностей NT-подобных систем, прав пользователей и системы безопасности.

2. Глюки самого Автокада. Некоторые обнаруживаются не сразу. Например, вот эта ошибка (а может, и не "глюк", а "фича") объявилась на 1001-компьютере. А на 1000 - работает нормально. Но нужно было сочетание ряда непредсказуемых условий, чтобы наткнуться. Конечно, исправить - дело плевое, замена одного файла библиотеки функций решит проблему. Все пользователи на строгом учете.

Хуже, когда ужасные ошибки делаются в очень популярных системах. Например, сейчас массово переходят на OpenOffice. Мне пришлось тестировать плотно Calc и Base и выяснилось, что, при определенных условиях, они вообще неработоспособны. Причем предыдущие версии работали нормально, а самые свежие вообще разучились (Base). А Calc (заменитель Excel) вообще неправильно "калькулирует" в некоторых ситуациях. Причем об этом знают, но успокаивают (цитирую)

Цитата:
«Злые языки утверждают, что Calc не позволяет идентифицировать некорректные формулы (эта возможность — одна из самых ценных в Excel). Это так. Зато во всех остальных случаях приложение OpenOffice.org оказывается вполне достойным как по удобству и возможностям, так и по корректному отображению файлов форматов Microsoft Office (в частности, XLS)».
Приехали! Оказывается, если калькулятор неправильно проводит вычисления, то это не страшно. Это «злые языки» утверждают. Но «зато во всех остальных случаях» он вполне достойный.

Какие такие «остальные случаи» для плохо считающего калькулятора? Использование в качестве пресса для бумаг?

Спасибо всем за содействие с тестом. Ситуация прояснилась, решение найдено.
ShaggyDoc вне форума  
 
Непрочитано 15.05.2007, 14:32
#17
Олег К.

Инженер-теплотехник
 
Регистрация: 17.08.2006
Смоленск
Сообщений: 311


А-а, так получается исходная программа и не должна вернуть имя несуществующего каталога? И соотв обязана вывести имя существующего (извините, что уточняю, не очень разбираюсь в объектных функциях, а тем более в их связи с реестром).
Вспомнил еще о фаерволах, настройках безопасности винды и прочем. Ведь можно запретить программам менять записи в реестре, перемещать файлы программ и т.п. Хотя это Вы наверняка в первую очередь проверили.
Олег К. вне форума  
 
Непрочитано 15.05.2007, 14:54
#18
ФСФ

проектировщик
 
Регистрация: 07.03.2007
Шахты
Сообщений: 32


ShaggyDoc:
3. ... функцией vla-put-supportpath добавляем в начало фиктивный каталог. В этот момент этот каталог добавляется и в реестр и в диалог (проверить можно пошаговым исполнением).
4. В четвертой строке мы читаем с помощью vla-get-supportpath дорожку. А в ней нет добавленного каталога!!!

У меня результат тот же, если не создать заранее реальный каталог.
Реальный каталог в строке выводится. AutoCAD 2006 русский.
ФСФ вне форума  
 
Непрочитано 15.05.2007, 17:33
#19
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Если есть возможность отсутствия каталога в путях поддержки, то нужна фукция проверки на его присутствие, а там уже надо думать по каким причинам он изчез, например пользователь запустился со спецярлыка, сменил добавил удалил профиль, появился новый пользователь виндофс, случайно удалил из окна настроек. Если вашего пути поддержки нет но он нужен то добавить и после того как проверка пройдена грузить лиспы из этого каталога или выдать сообщение об ошибке.
я у себя свои лиспы так и гружу через ACADDOC. Эта мысль мне пришла в голову когда СПДС начал пользовать ну и когда там автокад переустановить надо чтоб в настройки не пользовать каждый раз он автоматически добавляется при первом запуске и при запуске СПДС. при этом я точно уверен что каталог есть на диске и все лиспы в нем присутствуют.

А если каталога нет на диске, но он был то тут явно пользователь сам постарался и сам виноват. "Ой, ма, смотри чёй это за каталог такой смешной C:\Documents and Settings\LAMER\Application Data\Autodesk\AutoCAD 2007\R17.0\rus\Support\ЧужиеLISPы". DELET. Тут уже ничего не поделаешь и ждет вас оказание вечного суппорта. И нет вашей вины, и пусчай он сам мучится.

Если программа расчитана на широкий круг пользователей которым невдомек, что ваша программа расположена в какомто каталоге. то не мешалобы сделать проверку на присутствие каталога непосредственно на диске, хотя это и не обязательно см. абзац выше.

А то, что, там ввел руками, удалил лиспом, попытался подсунуть несуществуючий это все ерунда. Если каталог есть на диске то проблем никаких не будет и все будет работать как надо.
mmax вне форума  
 
Автор темы   Непрочитано 15.05.2007, 22:01
#20
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Ой, не надо мне рассказывать, как писать программы. Разумеется, все что надо есть - и проверка профилей, и проверка каталогов, и их создание и прочее.

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

Здесь я просил только проверить на разных версиях функции get и put. По идее, одна (put) должна строку создать и записать куда положено, а вторая (get) должна строку прочитать. Проверка существования каталога - не их компетенция. Это делается на другом уровне. Например, в диалоговом окне при вводе несуществующего каталога выдается запрос. А если подтвердил, то он записывается, и это логично. Запрос - на уровне программы (команды), а запись - на уровне функции.

Если предположить, что нельзя в путях иметь несуществующий каталог, то тогда и put не должна его записывать. Но это должно быть документировано. В документации ограничений нет, да и put добавляет хоть что. А уж для get вообще не ее собачье дело что-то решать. Она должна вернуть то, что записано.

Иначе как же сделать проверку на ошибочные каталоги? В настройках-то они есть, а выявить можно только визуально или нештатными методами. А надо бы штатными.
ShaggyDoc вне форума  
 
Непрочитано 16.05.2007, 00:28
#21
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


А будет ли работоспособна следующая конструкция. Допустим я пожелаю для единообразия работы на разных компьютерах поместить некоторые данные (личный файл меню допустим) на съемный диск. Далее установлю на каждом компьютере первым из путей поиска этот диск с той целью, чтобы нужные файлы “цеплялись” автоматом. Так вот вопрос: будут ли сохраняться пути при загрузке в отсутствии диска (а следовательно и путей к нему) и будут ли при последующей загрузке, когда диск на месте, цепляться нужные файлы?
AY вне форума  
 
Непрочитано 16.05.2007, 02:26
#22
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


ShaggyDoc Может быть у вас программа только что иделает как создает и удаляет каталоги. но если придраться к путям поддержки, то зачем нужен путь без каталога, он не несет никакой функции. Если собрались добавить путь, то предварительно создайте каталог, если решили удалить каталог удалите путь и буде вам счастье.

AY фвтокад может записывать пути на несуществующие каталоги, и если вы воткнете флешку с файлом, то каталог станет рабочим, но возможно придется перезапустить автокад или перезагрузить меню тк меню грузится только при загрузке и командой mnuload. Также имя диска в путях указывается конкретно A: B: G:
Если у вас прописано G:\support, а вы сунули левую флешку, а в другое гнездо флешку с нужным файлом, то обратите внимание какой диск какую букву получил.
Я это так понимаю. Скорее всего добавление несуществующих путей для этого и сделано
mmax вне форума  
 
Непрочитано 16.05.2007, 04:56
#23
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>>ShaggyDoc
Код:
[Выделить все]
"17.1s (LMS Tech)" 
"C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\GEOL_DH\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\support;C:\\Program Files\\AutoCAD 2008\\fonts;C:\\Program Files\\AutoCAD 2008\\help;C:\\Program Files\\AutoCAD 2008\\Express;C:\\Program Files\\AutoCAD 2008\\support\\color;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\02_BLOCKS_SLIDES;C:\\Documents and Settings\\KAI-2001\\Application Data\\Autodesk\\AutoCAD 2008\\R17.1\\enu\\Support" 
"C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\GEOL_DH\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\support;C:\\Program Files\\AutoCAD 2008\\fonts;C:\\Program Files\\AutoCAD 2008\\help;C:\\Program Files\\AutoCAD 2008\\Express;C:\\Program Files\\AutoCAD 2008\\support\\color;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\02_BLOCKS_SLIDES;C:\\Documents and Settings\\KAI-2001\\Application Data\\Autodesk\\AutoCAD 2008\\R17.1\\enu\\Support" 
"C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\GEOL_DH\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\support;C:\\Program Files\\AutoCAD 2008\\fonts;C:\\Program Files\\AutoCAD 2008\\help;C:\\Program Files\\AutoCAD 2008\\Express;C:\\Program Files\\AutoCAD 2008\\support\\color;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\02_BLOCKS_SLIDES;C:\\Documents and Settings\\KAI-2001\\Application Data\\Autodesk\\AutoCAD 2008\\R17.1\\enu\\Support"
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 16.05.2007, 06:30
#24
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от AY
А будет ли работоспособна следующая конструкция. Допустим я пожелаю для единообразия работы на разных компьютерах поместить некоторые данные (личный файл меню допустим) на съемный диск. Далее установлю на каждом компьютере первым из путей поиска этот диск с той целью, чтобы нужные файлы “цеплялись” автоматом. Так вот вопрос: будут ли сохраняться пути при загрузке в отсутствии диска (а следовательно и путей к нему) и будут ли при последующей загрузке, когда диск на месте, цепляться нужные файлы?
Вот для подобных случаев и делаются проверки. Этим должна заниматься специальная программа во время инициализации. Требуемый дис может быть и съемный, и сетевой, в момент запуска он может физически отсутствовать, может быть сеть недоступна и т.д.

Такой путь прописан в профиле. И в момент инициализации надо проверить наличие пути в профиле, физическое наличие, и если нет, то что-то сделать. В том числе, возможно, заменить "битые" дорожки на другие. Тут разные варианты, например, использование как резерва, папки с локального компьютера.

Для этого и необходимо получение полного списка путей. А уж что с ним делать - должна решать программа, а не функция, назначение которой всего лишь вернуть строку.
ShaggyDoc вне форума  
 
Непрочитано 16.05.2007, 11:15
#25
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Мое маленькое исследование.
Пишем функцию, добавляющую путь к имеющемуся списку путей поддержки:
Код:
[Выделить все]
(defun add-path (path / support_path) 
  (print (getvar "ACADVER")) 
  (print (setq support_path (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))) 
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) (strcat path ";" support_path)) 
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))  
  (princ) 
)
Если теперь попытаться добавить путь к имеющемуся каталогу, то все получается:
Цитата:
(add-path "D:\\Design_stock")

"16.0s (LMS Tech)"
"C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
"D:\\Design_stock;C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
При этом, в диалоговом окне Options на вкладке Files видим добавленный новый путь поддержки как в узле "Support File Search Path", так и в узле "Working Support File Search Path".

Удаляем вручную добавленный путь.
Пытаемся добавить путь к несуществующему каталогу и получаем следующий результат:
Цитата:
(add-path "D:\\Assa")

"16.0s (LMS Tech)"
"C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
"C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
Т.е добавленный путь не читается функцией vla-get-supportpath (равно, как и через системную переменную ACADPREFIX).
При этом добавленный путь появился только в узле "Support File Search Path и не появился в узле "Working Support File Search Path".

Вывод:
Отсутствие каталога, путь к которому регистрируется, может приводить (а может и всегда гарантированно приводит) к последующему неправильному результату при чтении.
Pastor вне форума  
 
Непрочитано 16.05.2007, 11:31
#26
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Поправлю сам себя.
Думаю, что vla-get-supportpath всегда возвращает правильный результат, а именно пути, присутствующие в узле "Working Support File Search Path"! Т.е. реально существующие на текущий момент пути поддержки.
Pastor вне форума  
 
Автор темы   Непрочитано 16.05.2007, 13:37
#27
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Pastor
Поправлю сам себя.
Думаю, что vla-get-supportpath всегда возвращает правильный результат, а именно пути, присутствующие в узле "Working Support File Search Path"! Т.е. реально существующие на текущий момент пути поддержки.
Вот если бы функция называлась, например, vla-get-workingsupportpath, то тогда было бы правильно. Такая функция, конечно, нужна - приходится делать ее собственный заменитель. То есть проверять самостоятельно наличие требуемых каталогов (заодно выбрасывая, возможно физически существующие, но не нужные). А для этого надо иметь полный список. Конечно, его можно напрямую прочитать из реестра - так и приходится делать. Но хотелось бы стандартным методом, так как не исключено, что в будущем это будет храниться иначе.

Так как тема вызвала интерес, сообщаю подробности - может кому-то пригодится для предотвращения своих ошибок.

В системе ruCAD для каждого нового пользователя создается профиль и специальные папки, которые надо включать в SupportPath. Некоторые файлы используются со всеми версиями Автокада, некоторые - для каждой версии. В связи с появляющейся несовместимостью форматов пришлось делать подкаталоги и с точкой (R16.1, R16.2 и т.д).

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

В шаблоне есть строки наподобие

Код:
[Выделить все]
(setq *ru_acad_version_r* "%RU_ACAD_VERSION_R%")
(load "%RU_MAIN_FAS_LIB%")
Программа-стартер заменяет шаблоны типа %RU_ACAD_VERSION_R%
на значения соответствующих переменных - в результате будет конкретный путь для пользователя (у всех может быть разный в зависимости от настроек Windows). Таким образом работают около 1000 пользователей.

Но одной вредной особе (она здесь иногда ошивается) был сделан "специальный билд", в котором появились кое-какие изменения. В инсталляцию случайно попала неправильная версия шаблона. В результате стали возникать ошибки, которых могло бы не быть, если бы vla-get-supportpath возвращала то, что от нее ожидалось. Или если бы она была правильно документирована.

Найти виновницу оказалось нелегко, так как внешние признаки ошибки казалось бы не имели к этому месту никакого отношения.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Просьба протестировать функцию