Тема: Как программно добавить ObjectARX-приложение в список автозагрузки?

Здравствуйте!
Подскажите, пожалуйста, какими способами можно програмно добавить ObjectARX приложение в список автозагрузки автокада.
На данный момент я храню название своего приложения в файле acad.rx рабочей папки Автокада, это работает,
но хотелось бы узнать другие методы.
Заранее благодарен

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

AcadAppInfo appInfo;
appInfo.setAppName("MyApp");
appInfo.setModuleName("C:\\MyDir\\MyApp.arx");
appInfo.setAppDesc("My first App");
appInfo.setLoadReason(AcadApp::kOnAutoCADStartup);
if( appInfo.writeToRegistry(false,true) != AcadApp::eOk ) {
    acutPrintf("\nНе могу зарегистрировать приложение для автозагрузки");
}

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

> Александр Ривилис
Извините за офтоп, Александр, Вас не затруднит посмотреть топик https://www.caduser.ru/forum/topic23759.html

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

При попытке использовать этот код в DLL, используемую инсталлятором VS.NET Setup Project
выдает ошибку :( начиная со строчки appInfo.setAppDesc("My first App");
(то есть если оставить только 3 первые строки и вызвать DLL-функцию, инсталлятор отрабатывает). Не могу догнать в чем дело :( Если есть какие-то соображения по этому вопросу убедительно прошу написать.

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

> Kostt
:) Этот код работает только из загруженного arx-файла - т.е. первый раз arx-файл нужно загрузить вручную.
Но тебе, как я понял, нужно сделать инсталлятор. Тогда немного иначе иначе. Тебе нужно прописать программно в registry информацию для загрузки приложения:

[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:409\Applications\MyApp]
"DESCRIPTION"="MyApp Command Module"
"LOADCTRLS"=dword:00000002
"LOADER"="C:\\MyDir\\MyApp.arx"
Или
[HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:409\Applications\MyApp]
"DESCRIPTION"="MyApp Command Module"
"LOADCTRLS"=dword:00000002
"LOADER"="C:\\MyDir\\MyApp.arx"

R16.2\ACAD-4001:409 - это для английской версии AutoCAD 2006 - если тебе нужно инсталлировать свой arx в другую версию AutoCAD, то ты должен найти нужный тебе AutoCAD в ветке:
HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

P.S. Посмотри как в этот раздел registry прописаны другие arx-приложения.

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

А можно сделать свой раздел реестра. Там должен лежать путь используемого Акада.
Сделать небольшой exe-ник загрузчик. Он запускает acad.exe в рабочей папке твоего приложения (тоже можно писать в реест при инсталляции софтины). В эту папку складываешь acad.rx
Получаем такую феньку:
1) Не надо парится с реестром акадов (коих может быть много).
2) Приложение не загружается "услужливо" автоматом с загрузкой акада. (Если пользователь пускает акад, то грузится просто акад). Если пользователю нужна твоя софтина, то он и запускает ее своим ярлыком.
Просто меня "ненавязчивый сервис" довесков с автоматической загрузкой к Акаду несколько раздражает. После установки N-го числа пакетов - стартуешь Акад - начинает грузится куча чего-то, что уже и забыл что...

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

Немножко не в тему, но все же спрошу.

"LOADER"="C:\\MyDir\\MyApp.arx"

Здесь может быть путь к модулю, находящемуся на сетевом ресурсе (например на сервере). В один прекрасный момент сетевой ресурс стал недоступным (лег сервер (не очень прекрасный момент:)). То что не загрузились доп. функции к акаду это еще терпимо. Но в этом случае при наборе любых команд с клавиатуры акад жестоко тормозит (видимо смотрит реестр, потом пытается загрузить недоступный модуль). Короче очень раздражает. Вопрос:
Можно ли в реестре прописать альтернативный путь, ну что-то вроде LOADER2? Чтобы не перебивать на всех компах путь к модуль. (Переименовать сервер - не предлагать;))

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

Большое спасибо за советы!

Re: Как программно добавить ObjectARX-приложение в список автозагрузки?

> KonstantinM
Совершенно согласен - тоже не люблю навязчивый сервис. У нас реализовано несколько иначе.
Запускающий AutoCAD exe-файл создает собственный профиль, чтобы не конфликтовать с другими приложениями, а загрузка всех необходимых arx-приложений происходит в lisp-файлах (в регистратуре arx-файлы не прописаны).

> bkrug
IMHO хорошей альтернативы нет. Разве что не хранить приложение на сервере.
Другое дело, если в принципе нужно загружать эти arx-файлы только тогда, когда запускаются команды определенные в них. Тогда достаточно изменить:

"LOADCTRLS"=dword:0000000C

И прописать список определенных в нем команд:

[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R16.2\ACAD-4001:409\Applications\MyApp\Commands]
"MyAppCmd1"="MyAppCmd1"
"MyAppCmd2"="MyAppCmd2"
...

Еще можно не перебивать вручную, а написать простенькую программку, которая будет менять содержимое ключа LOADER на альтернативное для всех приложений, ссылающихся на сервер если он недоступен. Можно даже сделать так, чтобы она анализировала состояние сервера и:
1) если сервер недоступен, меняла ключ LOADER для всех приложений на альтернативный и загружала AutoCAD;
2) если сервер доступен,меняла ключ LOADER для всех приложений на "серверный" и загружала AutoCAD;
Вариантов масса... :)