2014-02-13 3 views
1

Мне нужно запустить AutoCAD из службы Windows. Эта служба работает с «специальным» пользователем домена, который создается только для запуска моего сервиса. Этот пользователь является администратором на компьютере, и этот пользователь установил AutoCAD 2014 на машине. код я использую для запуска AutoCAD 2014 из C#:Как запустить AutoCAD с .NET, используя службу Windows

IAcadApplication acadApp; 
    try 
    { 
    var acadType = Type.GetTypeFromProgID("AutoCAD.Application.19", true); 
    acadApp = (AcadApplication) Activator.CreateInstance(acadType, true); 
    } 
    catch (Exception ex) 
    { 
    // do fancy error handling here 
    } 

У меня есть ссылка на библиотеку AutoCAD COM. (Interop.AutoCAD.dll) Если я запустил вышеуказанный код с моим зарегистрированным пользователем, запускается AutoCAD, и я могу делать все, что хочу, с помощью SendCommand. Если я ставлю его в службе (см Update), запустите службу с моим «специальным» пользователем команда CreateInstance бросает это:

{ "Получение COM фабрик классов для компонента с CLSID {BD0DEB94- 63dB-4392-9420-6EEE05094B1F} не удалось из-за следующей ошибки: 80080005 ошибка выполнения сервера (исключение из HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). "}

дело в том, что acad.exe начинается, но перестает потреблять память около 44 Мбайт, а через 1-2 минуты я получаю исключение. Обычно acad.exe начинается с 112 Мбайт потребляемой памяти. Если я запустил службу у зарегистрированного имени пользователя, все будет работать так, как ожидалось. Оба пользователя находятся в одних и тех же группах пользователей, в том же домене. Поэтому мой код по существу работает. Но цель состоит в том, чтобы иметь серверную программу, которая может запускать материал AutoCAD. Как запустить AutoCAD на сервере в этом сценарии? По некоторым сообщениям по сети, это может быть вызвано проблемами прав доступа. Но какие права я должен предоставить «специальному» пользователю?

ОБНОВЛЕНИЕ: Поскольку я опубликовал его на официальном форуме Autodesk, я не могу запустить AutoCAD из службы. Пользователь не имеет значения. Кто-то на официальном форуме заявил, что AutoCAD нельзя запускать из службы. Либо это, либо что-то с лицензированием может вызвать такое поведение ... Хотя, я все еще открыт для любого решения для запуска AutoCAD из службы. (Windows Service принимала WCF, чтобы быть более точным.)

UDPATE2: Так как я не нашел решение проблемы, и AutoCAD не останавливается с сообщением полезной ошибки, я решил эту проблему без использования службы Windows. В настоящее время я принимаю решение WCF в решении командной строки и запускаю его как пользователь. Это так же уродливо, как и получается. Я даже не могу подсчитать, какие вызовы он принесет. Но крайними сроками являются сроки ... Я по-прежнему открыт для real решений.

+0

ОП добавил новую информацию здесь: http://forums.autodesk.com/t5/NET/Start-AutoCAD-with-interop-but-with-different-user/mp/4815925 –

+0

Могу ли я спросить, почему вам необходимо запустить Autocad из службы. Поскольку вы начинаете его с Сервиса, я верю, что вам не нужно взаимодействовать с пользователем. Что вам нужно сделать, что включает запуск Autocad как службы? –

+0

@PauloCorreia: Мы должны запускать программу LISP ** автоматически **. Он получает некоторые входные значения (Excel) и выполняет сложный дизайн. Нам не нужно взаимодействие с пользователем. (Никогда не говорила, что нам это нужно ...) Моя проблема: использование interop в сервисе, я не могу создать экземпляр AutoCAD (не могу запустить его), поэтому я ничего не могу с этим поделать. – AntiTalent

ответ

0

Проблема здесь является персоной, необходимые для запуска COM API ... служба Windows, не будет иметь этот ...

Вы можете попробовать автоматизацию с AutoCAD Console, проверьте accoreconsole.exe в папке AutoCAD. Вам нужно будет создать файл сценария, содержащий список команд, которые вы хотите запустить (включая пользовательскую команду .NET), затем запустите консоль для запуска этого скрипта.

Должно работать.

+0

Ничего себе. Не знал об этом инструменте. Googling it -> кажется [перспективным] (http://through-the-interface.typepad.com/through_the_interface/2012/02/the-autocad-2013-core-console.html). Я попробую, как только у меня будет время. Спасибо за публикацию этого. Если это сработает, я обязательно буду отмечать ваш ответ как решение. – AntiTalent