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

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

Коллекция ключей AutoCAD в реестре

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

Коллеги, интересует запись версий AutoCAD 2009, а особенно - различных "вертикальных" решений на движке AutoCAD (ADT, MEP и т.п.) в реестре.

Чтобы узнать, надо:

1. Меню Пуск - Выполнить - regedit.

2. Открыть HKEY_LOCAL_MACHINE - Software - Autodesk.

3. Там может быть одна или несколько веток с именами наподобие R16, R17.1, а в них - подветки наподобие ACAD-6001:419.

4. Выделив в дереве подобную ветку, из контекстного меню выбрать Скопировать имя раздела и результат вставить из буфера в сообщение.

5. В правой части окна посмотреть значения ключей ProductName и Release. Оттуда надо списать значения или, чтобы не напрягаться,
в контекстном меню выбрать Изменить и скопировать значение в буфер. Потом щелкнуть Отмена и результат вставить из буфера в сообщение.

(см. прилагаемый рисунок, искомое подчеркнуто)

В итоге должно получиться наподобие:

AutoCAD 2008, английский ( здесь своё пояснение) а далее результаты:

Код:
[Выделить все]
 
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6001:409
ProductName=AutoCAD 2008
Release=17.1.51.0
С версиями "голых" AutoCAD 2008 и младше можно не беспокоиться. А "десктопы" интересуют начиная с версии 2006.

"Сами мы не местные... Для вас это ничего не значит, а для нас поддержка в жизни..."

Миниатюры
Нажмите на изображение для увеличения
Название: acad_reg.jpg
Просмотров: 4991
Размер:	70.5 Кб
ID:	9252  

Просмотров: 107599
 
Непрочитано 13.08.2008, 13:18
#2
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


AutoCAD 2008 Architecture 2008 (рус):

Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6004:419
ProductName=AutoCAD Architecture 2008
Release=5.5.256.0
Vildar вне форума  
 
Непрочитано 13.08.2008, 13:24
#3
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


AutoCAD MEP 2008 (рус)

Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6006:419
ProductName=AutoCAD MEP 2008
Release=5.5.201.0
Vildar вне форума  
 
Непрочитано 13.08.2008, 13:26
#4
Кулик Алексей aka kpblc
Moderator

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


AutoCAD 2008 Architecture Eng + SP1:
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6004:409
Product Name=AutoCAD Architecture 2008
ProductNameShort=ACD-A 2008
Release=5.5.256.0
AutoCAD 2009 Architecture Eng:
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7004:409
ProductName=AutoCAD Architecture 2009
ProductNameShort=ACD-A 2009
Release=5.7.68.0
Могу еще предоставить для 2006 и 2005 ADT ключи. Надо?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 13.08.2008, 13:46
#5
ShaggyDoc

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


А, давйте все. Может другим пригодится. Если что, закачаем обратно.
ShaggyDoc вне форума  
 
Непрочитано 13.08.2008, 14:01
#6
Кулик Алексей aka kpblc
Moderator

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


Autodesk Architectural Desktop 2005 Eng:
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.1\ACAD-304:409
ProductName=Autodesk Architectural Desktop 2005
ProductNameShort=ADT 2005
Release=4.5.227.0
AutoCAD 2006 Eng:
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:409
ProductName=AutoCAD 2006
ProductNameShort=<Отсутствует>
Release=16.2.77.0
Autodesk Architectural Desktop 2006 Eng:
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4004:409
ProductName=Autodesk Architectural Desktop 2006
ProductNameShort=ADT 2006
Release=4.7.302.0
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 13.08.2008 в 23:07. Причина: Ошибка в имени ключа для AutoCAD 2006 Eng
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.08.2008, 19:40
#7
alexhach


 
Регистрация: 15.10.2007
Пермский край
Сообщений: 93


AutoCAD 2008 Architecture 2008 (rus):
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6004:419
ProductName=AutoCAD Architecture 2008
Release=5.5.235.0
alexhach вне форума  
 
Непрочитано 13.08.2008, 20:27
#8
Vildar

AutoCAD
 
Регистрация: 26.07.2007
Москва
Сообщений: 1,064


AutoCAD 2009 (рус):
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7001:419
ProductName=AutoCAD 2009
Release=17.2.56.0
Vildar вне форума  
 
Непрочитано 14.08.2008, 03:00
#9
Димас

джедай
 
Регистрация: 31.01.2005
Магадан
Сообщений: 460
<phrase 1=


вроде просили для 2009, но в топике и 2008 есть. так что получайте)
AutoCAD Civil 3D 2008 RUS
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6000:419
ProductName=AutoCAD Civil 3D 2008
Release=500.0.337.1
__________________
тут была подпись(
Димас вне форума  
 
Непрочитано 14.08.2008, 10:23
#10
Holon

CNC
 
Регистрация: 07.07.2007
Israel
Сообщений: 302


HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7005:409
AutoCAD Mechanical 2009
13.0.59.0
Holon вне форума  
 
Непрочитано 14.08.2008, 10:41
#11
KSI


 
Регистрация: 19.03.2004
Калининград
Сообщений: 1,842


Для AutoCAD MEP 2009 Rus

HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7006:419
ProductName=AutoCAD MEP 2009
ProductNameShort=ACD-MEP 2009
Release=5.7.68.0

Для Autodesk Architectural Desktop 2007 Rus

HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.0\ACAD-5004:419
ProductName=Autodesk Architectural Desktop 2007
ProductNameShort=ADT 2007
Release=5.0.318.0
KSI вне форума  
 
Автор темы   Непрочитано 15.08.2008, 06:35
#12
ShaggyDoc

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


Прошу поиграть с прилагаемой программой. Она выводит список программ, которые можно отнести к Автокадам. При выделении в списке показывает его основные параметры.

Особо интересует самый нижний (красный цвет). По идее там для каждого Автокада должна появляться строчка наподобие AutoCAD.Application.17.2.

Однако, если установлено две версии с одинаковым номером, но с разными EXE (русский и английский, например), то у одного из них Application вообще пустая. Это жульничество Autodesk, "я так думаю" (С)

А что будет, если еще и "десктопы" той же версии стоят?

Эти опыты нужны, чтобы по полному имени acad.exe получить однозначную строку Application. Необходимо, чтобы совершенно уверенно обращатьсяся к конкретному COM-серверу и при этом чтобы не вмешивался его родной братец.

Программа ничего никуда не пишет и ничего не изменяет. Только читает реестр.
Миниатюры
Нажмите на изображение для увеличения
Название: test_acad.png
Просмотров: 1257
Размер:	4.7 Кб
ID:	9322  
Вложения
Тип файла: zip acadsList.zip (225.5 Кб, 760 просмотров)
ShaggyDoc вне форума  
 
Непрочитано 15.08.2008, 10:28
#13
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


У меня 2009й рус.
В изловленных автокадах у меня AutoCAD 2009 Русский, R17.2 и AutoCAD 2006 Русский, R16.2
А строчка внизу AutoCAD.Application.17.1 и AutoCAD.Application.16.2
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 15.08.2008, 10:32
#14
Кулик Алексей aka kpblc
Moderator

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


Для ADT2005 и AutoCAD 2006 строка AutoCAD.Application не показывается. Для ADT2006, ADT2008, ADT2009 - все корректно. С причинами не разбирался (кода все равно не видно )
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.08.2008, 12:18
#15
ShaggyDoc

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


Да причина-то в реестре. В HKLM прописаны все Автокады. Взяв их коды типа R17.1 и местоположение acad.exe программа просматривает уже HKCR, например
HKEY_CLASSES_ROOT\AutoCAD.Application.17.1\CLSID
Ему соответствует код наподобие
{6AB55F46-2523-4701-A912-B226F46252BA}

Теперь, найдя

HKEY_CLASSES_ROOT\CLSID\{6AB55F46-2523-4701-A912-B226F46252BA}\LocalServer32

мы должны увидеть наподобие

C:\Acad\AutoCAD 2008\acad.exe /Automation

Если все так, то C:\Acad\AutoCAD 2008\acad.exe и есть AutoCAD.Application.17.1

Но фокусы Autodesk (начавшиеся в 2004) заключаются в том, что
{6AB55F46-2523-4701-A912-B226F46252BA} может указать совсем на другой exe. Да еще изменения динамически делаются по мере запуска того или иного Автокада. Чего никак в приличных домах быть не должно. Может и как в #13 оказаться.
ShaggyDoc вне форума  
 
Непрочитано 15.08.2008, 12:36
#16
Om81

Хочу быть фотографом :)
 
Регистрация: 21.10.2005
Москва, Кисловодск
Сообщений: 2,540
<phrase 1=


У меня ADT 2007. Нижняя красная строчка: просто AutoCAD.Application
__________________
Камень на камень, кирпич на кирпич..
Om81 вне форума  
 
Непрочитано 15.08.2008, 13:15
#17
Кулик Алексей aka kpblc
Moderator

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


ShaggyDoc, если честно, то я не очень понимаю. Надо получить путь к acad.exe? Или что-то еще требуется?
P.S. Если надо, могу выслать на почту экспорт куска реестра (своего, естественно) HKCR\AutoCAD*.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 15.08.2008, 14:17
#18
ShaggyDoc

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


Ничего не надо высылать. Путь к acad.exe находится мгновенно. Просто собираю коллекцию ключей и выявляю закономерности в формировании Application.

Разумеется, если установлен единственный CAD - будет AutoCAD.Application. Как в #16.

А нужно это затем, чтобы из сторонних программ через COM обращаться не к первому попавшемуся, и не к последнему запускавшемуся Автокаду, а к тому, какой нужен.
ShaggyDoc вне форума  
 
Непрочитано 15.08.2008, 14:29
#19
Кулик Алексей aka kpblc
Moderator

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


Намек понял, молчу
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.08.2008, 17:58
#20
KSI


 
Регистрация: 19.03.2004
Калининград
Сообщений: 1,842


Я вот что заметил, может пригодиться.

У меня установлены русские
Autodesk Architectural Desktop 2007:
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.0
AutoCAD MEP 2009:
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2

В HKCR имеется три записи
HKEY_CLASSES_ROOT\AutoCAD.Application.17
HKEY_CLASSES_ROOT\AutoCAD.Application.17.1
HKEY_CLASSES_ROOT\AutoCAD.Application.17.2

В Application.17 ссылка на CLSID, в котором прописан последняя запущенная программа, либо ADT 2007, либо MEP 2009.
В Application.17.1 и Application.17.2 ссылка на CLSID, в котором прописан путь к AutoCAD MEP 2009.

И результат запущенной программы acadsList.exe:
Autodesk Architectural Desktop 2007 Русский, R17.0
Application - пусто
Application: AutoCAD.Application (если последним запускался 2007)

AutoCAD MEP 2009 Русский, R17.2
Application: AutoCAD.Application.17.1
KSI вне форума  
 
Непрочитано 23.08.2008, 18:20
#21
Ddjo

архитектор
 
Регистрация: 01.04.2008
СПб
Сообщений: 295


Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6001:409
ProductName=AutoCAD 2008
Release=17.1.51.0
Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6004:409
ProductName=AutoCAD Architecture 2008
Release=5.5.235.0
Миниатюры
Нажмите на изображение для увеличения
Название: 111.jpg
Просмотров: 755
Размер:	15.6 Кб
ID:	9537  Нажмите на изображение для увеличения
Название: 1111.jpg
Просмотров: 537
Размер:	19.9 Кб
ID:	9538  

Последний раз редактировалось Ddjo, 23.08.2008 в 18:27.
Ddjo вне форума  
 
Непрочитано 25.08.2008, 11:04
#22
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,550


Объясните, пожалуйста, мне, неразумному, зачем все это нужно!

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

ps Был момент времени, когда я установил себе все начиная с 14 версии, но потом все удалил: и и на душе спокойней, и места побольше на диске стало, и проблема открытия чертежей в разных версиях отпала.
gomer вне форума  
 
Автор темы   Непрочитано 25.08.2008, 13:31
#23
ShaggyDoc

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


gomer , значит тебе это просто не нужно.

Эта информация для разработчиков серьезных приложений для AutoCAD. А серьезные приложения должны работать с разными версиями AutoCAD (а с какими-то не должны). У каждой версии есть свои глюки, фичи и особенности. Их надо выявлять, с ними надо бороться. Поэтому разработчик обязан знать, как ведут себя AutoCAD's разных версий, локализаций, да еще по разными OS.

Неизвестно ведь с чем придется работать приложению, например, на твоем рабочем месте. А кроме "голых" Автокадов еще существуют вертикальные решения. Их особенности тоже надо учитывать.

"Домашнему мастеру" достаточно иметь ответку, молоток да плоскогубцы. А профессионалы возят с собой кучу чемоданов с разными инструментами.
ShaggyDoc вне форума  
 
Непрочитано 25.08.2008, 13:48
#24
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,800
<phrase 1= Отправить сообщение для VVA с помощью Skype™


ShaggyDoc, Если еще актуально, то вот еще один довесочек
Код:
[Выделить все]
[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7000:419]
"Release"="6.0.990.1"
"ProductName"="AutoCAD Civil 3D 2009"
"ProductId"="7000"
"LocaleId"="419"
"Language"="Русский"
"LangAbbrev"="rus"

[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6000:419]
"Release"="500.0.496.1"
"ProductName"="AutoCAD Civil 3D 2008"
"ProductId"="6000"
"LocaleId"="419"
"Language"="Русский"
"LangAbbrev"="rus"
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 20.01.2010, 12:42
#25
Рита


 
Регистрация: 20.01.2010
Сообщений: 1


Пожалуйста, дайте действующий ключ для Автокад 2009 Рус

Код:

HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7001:419
ProductName=AutoCAD 2009
Release=17.2.56.0
Рита вне форума  
 
Непрочитано 20.01.2010, 13:24
#26
Кулик Алексей aka kpblc
Moderator

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


Какой такой ключ? Рита, ты правила форума читала?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.04.2010, 21:49
#27
andrei4_88


 
Регистрация: 25.04.2010
Сообщений: 1


Код:
[Выделить все]
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.2\ACAD-7001:419
ProductName=AutoCAD 2009
Release=17.2.56.0

Последний раз редактировалось andrei4_88, 25.04.2010 в 22:00.
andrei4_88 вне форума  
 
Непрочитано 29.04.2010, 08:06
#28
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Прошу поиграть с прилагаемой программой
1. AutoCAD 2009 Enu x86. Windows XP SP3 Rus x86.
2. AutoCAD 2011 Enu x86. Windows XP Rus x86.
3. AutoCAD 2011 Enu x64. Windows 7 Rus x64.

Ваша программа ничего не находит для всех трёх выше указанных вариантов (во всяком случае у меня).

Дополнительно:

Возможно вам будет интересна следующая информация (на тот случай, если приложения x86 будут установлены на оси x64):
Цитата:
Начну, пожалуй, с перенаправления реестра. Как известно, 64-х битные версии Windows поддерживают два разных представления реестра. Обращения 32-х разрядных приложений к «HKEY_LOCAL_MACHINE\Software» и некоторым другим ключам перенаправляются в «HKEY_LOCAL_MACHINE\Software\Wow6432Node». 64-х разрядные приложения обращаются к «HKEY_LOCAL_MACHINE\Software» напрямую. Таким образом, 32-х битные приложения частично изолируются от 64-х разрядных компонент.
Offtop: п.с. автор цитаты не я - сам когда-то мучался, да Александр Ривилис наставил на путь истинный ))).

Применительно к цитате - если в операционной системе x64 установить приложение x86 (во всяком случае AutoCAD 2009), то на самом деле информация будет храниться именно в выше указанной ветви ("Wow6432Node"), так что сие следует так же учитывать.

По факту это приводит к следующему: в Gegedit вы, как обычно, лезете в привычную ветку реестра и видите интересующую вас инфу, после чего со спокойной душой пишете код, выполняющий это же действие программно - однако ваша программа покажет, что этой инфы в той ветке на самом деле нет! Вы будете недоумевать, мол как это нет, когда Regedit показывает, что есть... (я так когда-то сам сидел над этим...). Однако в Regedit можно полезть в "HKEY_LOCAL_MACHINE\Software\Wow6432Node" и найти там то же самое, что вы искали в привычной для x86 ветке. В "Wow6432Node" нужные данные удастся обнаружить и путём "программного" чтения. Т.е. выходит, что не всё то, что показывает нам Regedit в оси x64, является таким на самом деле (применительно к x86 приложениям).

Применительно к вашей тестовой программке:

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

На вскидку код примерно такой (C#):
Код:
[Выделить все]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.IO;

namespace InstalledCads
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Инсталлированные версии AutoCAD";
            string acadNodeName = @"SOFTWARE\Autodesk\AutoCAD";
            string acadSpNodeName = @"Service Packs";
            Console.WriteLine("Операционная система: {0} ({1}){2}", Environment.OSVersion, Environment.Is64BitOperatingSystem ? "x64" : "x86", Environment.NewLine);
            //1. Если операционная система является x86 с установленным AutoCAD x86, или же если операционная система x64 с установленным AutoCAD x64
            RegistryKey acadNode = Registry.LocalMachine.OpenSubKey(acadNodeName);
            string acadNotInstalled = "На данном компьютере AutoCAD не установлен.";
            PrintInfo(acadSpNodeName, acadNode, acadNotInstalled);

            //2. Если операционная система является x64 с установленным AutoCAD x86
            //Внимание! этот блок кода не проверял на работоспособность, т.к. сейчас сижу за x86 и нет возможности проверить на x64
            if (Environment.Is64BitOperatingSystem)
            {
                acadNodeName = @"SOFTWARE\Wow6432Node\Autodesk\AutoCAD";
                acadNotInstalled = string.Empty;
                acadNode = Registry.LocalMachine.OpenSubKey(acadNodeName);
                PrintInfo(acadSpNodeName, acadNode, acadNotInstalled);
            }
            Console.Read();
        }

        /// <summary>
        /// Метод выводит на консоль информацию об установленных на локальной машине версиях AutoCAD
        /// </summary>
        /// <param name="acadSpNodeName">Имя ветви, содержащей информацию об установленных обновлениях AutoCAD</param>
        /// <param name="acadNode">Основная ветвь, инкапсулирующая в себе информацию об установленных версиях AutoCAD (и вертикальных решений на его базе)</param>
        /// <param name="acadNotInstalled">Сообщение, которое выводится в случае, когда ни один AutoCAD не установлен</param>
        private static void PrintInfo(string acadSpNodeName, RegistryKey acadNode, string acadNotInstalled)
        {
            if (acadNode == null)
            {
                Console.WriteLine(acadNotInstalled);
                Console.Read();
            }

            IEnumerable<RegistryKey> acads = acadNode.GetSubKeyNames().SelectMany(n => acadNode.OpenSubKey(n).GetSubKeyNames().Select(m => acadNode.OpenSubKey(Path.Combine(n, m))));
            foreach (RegistryKey cad in acads)
            {
                Console.WriteLine("ProductName: {0}", cad.GetValue("ProductName", string.Empty));
                Console.WriteLine("Language: {0}", cad.GetValue("Language", string.Empty));
                Console.WriteLine("Release: {0}", cad.GetValue("Release", string.Empty));
                Console.WriteLine("Location: \"{0}\"", cad.GetValue("Location", string.Empty));
                RegistryKey spParentNode = cad.OpenSubKey(acadSpNodeName);
                if (spParentNode != null && spParentNode.GetSubKeyNames().Length > 0)
                {
                    RegistryKey spNode = spParentNode.OpenSubKey(spParentNode.GetSubKeyNames()[0]);
                    Console.WriteLine("Установленное обновление: \"{0}\" ({1})", spNode.GetValue("PatchTitle", string.Empty), spNode.GetValue("Release", string.Empty));
                }
                Console.WriteLine("{0}{1}", new string('*', 20), Environment.NewLine);
            }
        }
    }
}
однако у меня нет сейчас под рукой операционки x64, чтобы проверить фрагмент кода, относящийся к случаю, когда в операционную систему x64 установлен AutoCAD x86.
Если интересует - позже могу проверить (дома) и если потребуется - подправить код.

На Windows XP Rus x86 SP3 результат работы кода такой:


Последний раз редактировалось hwd, 29.04.2010 в 12:56.
hwd вне форума  
 
Непрочитано 04.05.2010, 10:31
#29
Кулик Алексей aka kpblc
Moderator

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


Андрей, ты уточни версию студии, .NET-а и прочих прибамбасов А то ведь могут найтись любители
P.S. Кстати, я бы на твоем месте выложил уже скомпилированный код под разные версии AutoCAD'ов, если есть такая возможность...
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.05.2010, 11:09
#30
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Андрей, ты уточни версию студии, .NET-а и прочих прибамбасов А то ведь могут найтись любители
P.S. Кстати, я бы на твоем месте выложил уже скомпилированный код под разные версии AutoCAD'ов, если есть такая возможность...
На данный момент у меня установленной имеется только VS 2010, в выше приведённом коде использован .Net Framework 4.0.

.Net Framework 4.0 сильно отличается от .Net Framework 3.5 SP1:
- библиотека существенно переработана
- библиотека занимает объём в 4 раза меньший, чем предыдущая версия (и это с учётом всех добавленных новшеств)

Приведённый выше код работает только под версией 4.0, поскольку в версии 3.5 статический класс Environment не имеет свойства Is64BitOperatingSystem, с помощью которого я проверяю, присутствует ли ситуация, когда AutoCAD x86 установлен на Windows x64 (эту проверку выполнять обязательно, т.к. в таком случае следует обрабатывать иную ветвь реестра, как я уже писал выше).

В свете выше указанного нюанса, для того, чтобы код работал под .Net Framework 3.5 SP1, в него следует внести ряд изменений, после чего рабочий вариант будет выглядеть так:
Код:
[Выделить все]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Win32;
using System.IO;

namespace InstalledCads
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Инсталлированные версии AutoCAD";
            string acadNodeName = @"SOFTWARE\Autodesk\AutoCAD";
            string x = @"SOFTWARE\Wow6432Node\Autodesk\AutoCAD";
            string acadSpNodeName = @"Service Packs";
            Console.WriteLine("Операционная система: {0} ({1}){2}", Environment.OSVersion, Registry.LocalMachine.OpenSubKey(x) != null ? "x64" : "x86", Environment.NewLine);
            //1. Если операционная система является x86 с установленным AutoCAD x86, или же если операционная система x64 с установленным AutoCAD x64
            RegistryKey acadNode = Registry.LocalMachine.OpenSubKey(acadNodeName);
            string acadNotInstalled = "На данном компьютере AutoCAD не установлен.";
            PrintInfo(acadSpNodeName, acadNode, acadNotInstalled);

            //2. Если операционная система является x64 с установленным AutoCAD x86
            //Внимание! этот блок кода не проверял на работоспособность, т.к. сейчас сижу за x86 и нет возможности проверить на x64
            if (Registry.LocalMachine.OpenSubKey(acadNodeName) != null)
            {
                acadNodeName = x;
                acadNotInstalled = string.Empty;
                acadNode = Registry.LocalMachine.OpenSubKey(acadNodeName);
                PrintInfo(acadSpNodeName, acadNode, acadNotInstalled);
            }
            Console.Read();
        }

        /// <summary>
        /// Метод выводит на консоль информацию об установленных на локальной машине версиях AutoCAD
        /// </summary>
        /// <param name="acadSpNodeName">Имя ветви, содержащей информацию об установленных обновлениях AutoCAD</param>
        /// <param name="acadNode">Основная ветвь, инкапсулирующая в себе информацию об установленных версиях AutoCAD (и вертикальных решений на его базе)</param>
        /// <param name="acadNotInstalled">Сообщение, которое выводится в случае, когда ни один AutoCAD не установлен</param>
        private static void PrintInfo(string acadSpNodeName, RegistryKey acadNode, string acadNotInstalled)
        {
            if (acadNode == null)
            {
                Console.WriteLine(acadNotInstalled);
                Console.Read();
            }

            IEnumerable<RegistryKey> acads = acadNode.GetSubKeyNames().SelectMany(n => acadNode.OpenSubKey(n).GetSubKeyNames().Select(m => acadNode.OpenSubKey(Path.Combine(n, m))));
            foreach (RegistryKey cad in acads)
            {
                Console.WriteLine("ProductName: {0}", cad.GetValue("ProductName", string.Empty));
                Console.WriteLine("Language: {0}", cad.GetValue("Language", string.Empty));
                Console.WriteLine("Release: {0}", cad.GetValue("Release", string.Empty));
                Console.WriteLine("Location: \"{0}\"", cad.GetValue("Location", string.Empty));
                RegistryKey spParentNode = cad.OpenSubKey(acadSpNodeName);
                if (spParentNode != null && spParentNode.GetSubKeyNames().Length > 0)
                {
                    RegistryKey spNode = spParentNode.OpenSubKey(spParentNode.GetSubKeyNames()[0]);
                    Console.WriteLine("Установленное обновление: \"{0}\" ({1})", spNode.GetValue("PatchTitle", string.Empty), spNode.GetValue("Release", string.Empty));
                }
                Console.WriteLine("{0}{1}", new string('*', 20), Environment.NewLine);
            }
        }
    }
}
п.с. Я до сих пор не проверил в Windows x64 работоспособность блока кода, помеченного мною как не проверенного, т.к. с 29-го числа до вчерашнего вечера не имел доступа к компу).

Скомпилированная версия кода (под версию 3.5 SP1) прилагается ниже.
Вложения
Тип файла: zip Release.zip (12.2 Кб, 266 просмотров)

Последний раз редактировалось hwd, 04.05.2010 в 11:35.
hwd вне форума  
 
Непрочитано 23.05.2010, 22:34
#31
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


ShaggyDoc у меня предложение для вашей программы acadsList не могли бы вы пути считывания из реестра оформить в ini файл.
У меня программа ничего не определила ОС 7 64 bit, AutoCAD 2010 64 bit
Код:
[Выделить все]
HKEY_USERS\S-1-5-21-390095120-3092638096-2726706110-1000\Software\Autodesk\AutoCAD\R18.0\ACAD-8001:419
ProductName=запись не нашел
Release=запись не нашел
sdv79 вне форума  
 
Непрочитано 15.06.2010, 10:26
#32
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


У AutoCAD 2011 32 bit, без довесков, какие ключи для английской и русской версий? Кто-нибудь может сейчас глянуть?
Tonic вне форума  
 
Непрочитано 15.06.2010, 12:17
#33
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
У AutoCAD 2011 32 bit, без довесков, какие ключи для английской и русской версий? Кто-нибудь может сейчас глянуть?
зачем это, если не секрет?
hwd вне форума  
 
Непрочитано 15.06.2010, 12:31
#34
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


Цитата:
Сообщение от hwd Посмотреть сообщение
зачем это, если не секрет?
Для поиска установленных версий AutoCAD'а (=> для последующей правки файла acaddoc.lsp именно этой версии)
Tonic вне форума  
 
Непрочитано 15.06.2010, 12:56
#35
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
Для поиска установленных версий AutoCAD'а (=> для последующей правки файла acaddoc.lsp именно этой версии)
Рекомендую прочитать #28 и #30.
hwd вне форума  
 
Непрочитано 15.06.2010, 13:10
#36
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


Прочитал. Кодов для 2010-го не увидел. У меня на компе, если что, эти версии не установлены.
Tonic вне форума  
 
Непрочитано 15.06.2010, 13:13
#37
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
Кодов для 2010-го не увидел.
И не увидите. Жёстко прописывать такую информацию в коде - не правильное решение. Её нужно динамически извлекать, что и продемонстророванно в указанных постах.
hwd вне форума  
 
Непрочитано 15.06.2010, 14:30
#38
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


Цитата:
Сообщение от hwd Посмотреть сообщение
Жёстко прописывать такую информацию в коде - не правильное решение
Почему неправильное? Скрипт Inno Setup извлекает только нужные мне значения (русских и английских версий чистого AutoCAD). Насколько я знаю, ключи для этих версий всегда одни и те же. Что же тут неправильного?
Tonic вне форума  
 
Непрочитано 15.06.2010, 14:32
#39
Кулик Алексей aka kpblc
Moderator

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


То есть на любое вертикальное приложение типа AutoCAD Architecture установить дополнение уже не получится.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.06.2010, 14:41
#40
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
Почему неправильное? Скрипт Inno Setup извлекает только нужные мне значения (русских и английских версий чистого AutoCAD). Насколько я знаю, ключи для этих версий всегда одни и те же. Что же тут неправильного?
Если вы желаете жёстко привязаться к определённой версии автокада - то можно и так, но ежели требуется автоматически находить все установленные версии автокада (чтобы можно было выбрать нужную из списка установленных и выполнить над ней действия) - в этом случае не следует фиксированно прописывать версии.
hwd вне форума  
 
Непрочитано 15.06.2010, 14:55
#41
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
То есть на любое вертикальное приложение типа AutoCAD Architecture установить дополнение уже не получится.
Да, только на чистый AutoCAD.
Цитата:
Сообщение от hwd Посмотреть сообщение
Если вы желаете жёстко привязаться к определённой версии автокада - то можно и так, но ежели требуется автоматически находить все установленные версии автокада (чтобы можно было выбрать нужную из списка установленных и выполнить над ней действия) - в этом случае не следует фиксированно прописывать версии.
Требуется находить версии AutoCAD с 2007 по 2011, если они установлены, для чего нужно фиксированно прописать 10 кодов (по 5 для русской и английской версий).

P.S. Причём для 32-битной версии Windows. Все возможные варианты, включая Revit, ADT и т.п., я не могу проверить, поэтому ограничиваюсь голым AutoCAD. К тому же, проверка на C#, да ещё в NET 4.0, меня не удовлетворяет =/
Tonic вне форума  
 
Непрочитано 15.06.2010, 15:22
#42
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
Требуется находить версии AutoCAD с 2007 по 2011, если они установлены, для чего нужно фиксированно прописать 10 кодов (по 5 для русской и английской версий).
Вот как раз таки и не нужно. Получаете программно список всех установленных акадов и фильтруете его, оставляя только нужное.

Цитата:
Сообщение от Tonic Посмотреть сообщение
P.S. Причём для 32-битной версии Windows... К тому же, проверка на C#, да ещё в NET 4.0, меня не удовлетворяет =/
Вы ОЧЕНЬ невнимательно читаете:
1. Код, который я показывал выше в топике, прекрасно работает в 32-битной Windows (о чем было написано).
2. Не важно на каком языке написать логику - хоть на лиспе. Алгоритм один и тот же. В примере показано, где именно в реестре следует искать информацию об установленных версиях автокадов.
3. Если бы вы внимательно читали, то заметили бы, что помимо версии для .Net 4.0 имеется и версия для .Net 3.5.

писать нужно на том, чем хорошо владеете (не важно lisp или .net, главное, чтобы была возможность решать стоящие задачи, в данном случае алгоритм решения один для любого языка).
hwd вне форума  
 
Непрочитано 15.06.2010, 15:39
#43
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


Цитата:
Сообщение от hwd Посмотреть сообщение
Не важно на каком языке написать логику - хоть на лиспе. Алгоритм один и тот же. В примере показано, где именно в реестре следует искать информацию об установленных версиях автокадов.
Насколько я понял, в ключе "ProductName"? В таком случае, если этот ключ всегда одинаков для одной и той же версии AutoCAD (с разными языками), это удобнее для поиска чистых AutoCAD. Все возможные надстройки вроде ADT предусмотреть сложно и долго, поэтому можно отфильтровать по соответствию значения строкам "AutoCAD 2007", "AutoCAD 2011" и т.д. Так удобнее, если ProductName всегда одинаков для всех языковых пакетов.
Я правильно понял алгоритм?
Цитата:
Сообщение от hwd Посмотреть сообщение
Если бы вы внимательно читали, то заметили бы, что помимо версии для .Net 4.0 имеется и версия для .Net 3.5.
Если программа устанавливается для AutoCAD 2007 с NET 2.0, этой версии на компьютере может и не быть - лучше не рисковать.
Tonic вне форума  
 
Непрочитано 15.06.2010, 15:48
#44
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Информация об установленных версиях не ограничивается "ProductName". Вы же хотите знать в каком каталоге установлено приложение и т.п.
Все автокады регистрируются в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD.
Пробежаться по ней в цикле и извлечь любую нужную информацию не трудно. Какие в этом сложности?
hwd вне форума  
 
Непрочитано 15.06.2010, 16:05
#45
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


Цитата:
Сообщение от hwd Посмотреть сообщение
Информация об установленных версиях не ограничивается "ProductName". Вы же хотите знать в каком каталоге установлено приложение и т.п.
Это понятно. Я имею ввиду, что по ProductName надо будет делать фильтр, а уже для отфильтрованных извлекать Location.
Так всё же, всегда ли одинаково значение ProductName для AutoCAD'ов? Т.е. для AutoCAD 2005 любых языковых пакетов значение ProductName всегда будет равно "AutoCAD 2005"?
P.S. Ещё один вопрос: какие приложения, помимо чистого AutoCAD, гарантированно будут вести себя аналогично соотв. версии чистого AutoCAD?
Tonic вне форума  
 
Непрочитано 15.06.2010, 16:13
#46
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
Это понятно. Я имею ввиду, что по ProductName надо будет делать фильтр, а уже для отфильтрованных извлекать Location.
Так всё же, всегда ли одинаково значение ProductName для AutoCAD'ов? Т.е. для AutoCAD 2005 любых языковых пакетов значение ProductName всегда будет равно "AutoCAD 2005"?
P.S. Ещё один вопрос: какие приложения, помимо чистого AutoCAD, гарантированно будут вести себя аналогично соотв. версии чистого AutoCAD?
В этом деле автодеск придерживается определённой логики (к счастью). Т.о. ProductName будет одинаков для любой локализации. Насколько мне известно - вертикальные решения регистрируются по тому же принципу (у меня был установлен триальный механикал десктоп - всё было организовано по той же схеме как и в обычном акаде).
hwd вне форума  
 
Непрочитано 22.06.2010, 09:33
#47
alex8888

Инженер
 
Регистрация: 27.04.2009
Deutschland
Сообщений: 207


ShaggyDoc, еще актуально?
Мои чиселки (Autocad Mechanical 2010 и 2011):

HKLM-Software-Autodesk-Autodesk Mechanical-Desktop-
14- MCAD-8005:407 -ACAD- AcadRel=R18.0
15- MCAD-9005:407 -ACAD- AcadRel=R18.1

Ось - винда 7 64х
Всё есс-но на немецком (естесственно для меня )
alex8888 вне форума  
 
Непрочитано 08.10.2010, 16:13
#48
LaWaSH


 
Регистрация: 08.10.2010
Сообщений: 1


HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.0\ACAD-5001:409
LaWaSH вне форума  
 
Непрочитано 08.10.2010, 21:11
#49
Кулик Алексей aka kpblc
Moderator

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


LaWaSH, и что?
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 15.10.2010, 15:04
#50
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


Кулик Алексей aka kpblc, пути и значения для AutoCAD в реестре Windows 7 аналогично Windoxs XP? Или там какая-то другая иерархия теперь?
Tonic вне форума  
 
Непрочитано 15.10.2010, 15:30
#51
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
Кулик Алексей aka kpblc, пути и значения для AutoCAD в реестре Windows 7 аналогично Windoxs XP? Или там какая-то другая иерархия теперь?
аналогичная. про разрядность оси только не забывай.
Offtop:
Автор давно не издавал звуков в этом топике, а народ всё отчитывается и отчитывается... Прямо паломничество какое-то
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 20.06.2011, 14:20
#52
Tonic


 
Регистрация: 26.06.2007
Воронеж
Сообщений: 135


В продолжение темы. В AutoCAD версии 2012 изменилось содержание ключа ProductName - теперь это не "AutoCAD 2012", а что-то длинное. Как я понимаю, то же относится и к вертикальным решениям.
У меня вопрос вот какой: ключи "ProductName" для 64-разрядных версий AutoCAD в 64-разрядных ОС находятся в другом месте? Или путь тот же?
Tonic вне форума  
 
Непрочитано 20.06.2011, 14:25
#53
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Tonic Посмотреть сообщение
У меня вопрос вот какой: ключи "ProductName" для 64-разрядных версий AutoCAD в 64-разрядных ОС находятся в другом месте? Или путь тот же?
Если автокад х64, то в том же. Здесь смотри код класса Program для нужной тебе версии .net.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 26.05.2012, 17:53
#54
abekebake


 
Регистрация: 26.05.2012
Сообщений: 1


HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R17.1\ACAD-6001:419
ProductName=AutoCAD 2008
Release=17.1.51.0
abekebake вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Коллекция ключей AutoCAD в реестре

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ObjectARX. Расчленение и удаление proxy-объектов Profan Готовые программы 236 17.08.2019 11:19
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
О создании темы (раздела) для новичков в AutoCAD. Profan Разное 110 23.10.2008 10:01
AUTOCAD 2006 Aragorn AutoCAD 14 01.04.2005 00:55
Что нового в AutoCAD 2005 ilka_t AutoCAD 40 19.05.2004 16:48