(изменено: Вильдар, 10 февраля 2011г. 11:34:37)

Тема: Запуск автокада и своего приложения?

Всем привет!

Давно мучаюсь со своим приложением, никак до ума не доведу.
Основную часть буду писать на C# NET.

Стоит вопрос как запускать свое приложение (загрузить сборки, меню).

Хочется, чтобы при установке приложение создало профиль акада с нужными настройками и запускалось только в этом профиле.
Как это можно реализовать? Хочу с вами посоветоваться.

Т.е. два вопроса:

1. Как можно создать профиль автокада?
В процессе установки программы (установщик пока использую installShield)
и после установки программы (exe утилита для создания профиля и ярлыка для запуска акада).

Мои предположения:
Cоздание профиля через реестр windows (в ветке hkcu). Пока точно не знаю как.
Через com интерфейс акада.

И еще вопрос, создавать и настраивать профиль с нуля (на основе стандартного профиля акада), или импортировать (программным способом, не вручную) из файла arg?

И если через реестр профиль создовать, то что, нужно скопировать профиль из какого-то существующего профиля? А потом добавлять свои настройки.


2. Как загружать приложение только при запуске нужного профиля акада?

Я думаю, что с помощью параметра запуска acad.exe - /Id (загрузка arx файла). Этот arx еще правда написать суметь нужно.
Т.е. создать "нужный" профиль, создать ярлык запуска акада с этим профилем и загрузкой arx, который загрузит сборку загрузчик всего остального.

Знаю, что можно прописать в реестре автозагрузку сборки при запуске автокада. Но не хотелось бы, чтобы мое приложение грузилось во все запускаемые акады. Только в нужный профиль.

Почитал "САПР на базе..."
Что-то плохо понял, как работает "стартер". Написано на делфях. Запуск acad.exe с параметрами /c (cfg файл), загрузка acaddoc.lsp принудительная, установка своего профиля.

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

Добавлено.
Приложение пишется для autocad 2008 и windows XP. Но, возможно, будет необходимость ставить и на более новые версии акада и винды.

Еще, по похожему сценарию действует CsIntegrator (программа SPDS GraphiCS). Вот, как он создает профили акада?

Re: Запуск автокада и своего приложения?

Думаю сделать свой стартер, для запуска акада с нужным профилем и загрузкой сборок.

Возник вопрос. Можно ли загрузить сборку в запущенный процесс acad.exe?
Процесс запускаю так:

System.Diagnostics.Process.Start(startInfo);

В startInfo задаю путь к запускаемому файлу acad.exe, и в параметрах запуска задаю профиль.

Тогда отпала бы нужда писать загрузчик на arx.

Re: Запуск автокада и своего приложения?

Вильдар пишет:

Можно ли загрузить сборку в запущенный процесс acad.exe?

Сборку на данный момент можно грузить двумя способами - через реестр или командой AutoCAD _NETLOAD. Выбирай любой.

Re: Запуск автокада и своего приложения?

Можно еще так загружать Assembly.LoadFrom(). Жалко из другого процесса так нельзя сделать.

Значит есть варианты:
- автозагружать сборку через реестр, при запуске акада проверять запущенный профиль и если это "мой" профиль, грузить все остальное. Минус - привязка загрузки приложения к имени профиля (вроде не очень плохо).
- загружать arx через параметр запуска acad.exe (а так же с параметром имени "моего" профиля), в нем загружать сборку (пока точно не знаю как :oops:). Минус - привязка к arx файлу (т.к. я очень плохо знаю c++ и arx, и разобраться с ними очень сложно).

Re: Запуск автокада и своего приложения?

Вильдар,
Раз большая часть будет написана на C#, имеет смысл вообще не использовать Автокад, а писать графическую часть на WPF

Re: Запуск автокада и своего приложения?

WPF крутая штука.
Пока пишу под Autocad2008 и NET2.
С 2009 акада можно использовать wpf.
А совсем не использовать акад я не могу, под него и пишу :D

Re: Запуск автокада и своего приложения?

Вильдар,
"С 2009 акада можно использовать wpf" - что под этим подразумевается?

Re: Запуск автокада и своего приложения?

То, что начиная с 2009 акада можно запускать wpf окна через Autodesk.AutoCAD.ApplicationServices.Application.ShowModalWindow и ShowModelessWindow.