Ошибка получения объекта com 2147221014

Я
   IKSparrow

02.06.14 — 16:08

Код такой:

    Попытка

        Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла);

    Исключение

        ЗаписьЖурналаРегистрации(

            «#COM»,

            УровеньЖурналаРегистрации.Ошибка,

            ЭтотОбъект,

            «Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла): «+Объект.ИмяФайла,

            ОписаниеОшибки());

        Возврат;

    КонецПопытки;

Ошибка такая: Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени

Платформа вот такая: 8.3.4.482

Где ошибка?

   1cVandal

1 — 02.06.14 — 16:11

Объект.ИмяФайла что там?

   IKSparrow

2 — 02.06.14 — 16:11

(1) D:Книга1.xls

   1cVandal

3 — 02.06.14 — 16:14

Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла,»Excel.Application»);

а так?

   1cVandal

4 — 02.06.14 — 16:15

да и прежде чем его обрабатывать,попробуй закрой его

   IKSparrow

5 — 02.06.14 — 16:16

(3) Неа, теперь так Ошибка получения объекта COM: -2147221005(0x800401F3): Недопустимая строка с указанием класса. Вроде же всю жизнь было Excel.Application.

   salvator

6 — 02.06.14 — 16:20

(5) Эксель не установлен?

   1cVandal

7 — 02.06.14 — 16:20

(5) а он у тебя установлен? может код на сервере выполняется?

   IKSparrow

8 — 02.06.14 — 16:24

(6) Excel установлен.

Балин…. Ну да… В процедуре формы с директивой &НаСервере

   IKSparrow

9 — 02.06.14 — 16:25

А на сервере Excel’я нет. А у меня тонкий клиент. Стало быть мне только Excel на сервак ставить и без вариантов, да?

   RomaH

10 — 02.06.14 — 16:27

(9) почему? — читаешь таблицу на клиенте

пишешь её в формат 1С — любая коллекция

передаешь её на сервер

   IKSparrow

11 — 02.06.14 — 16:32

(10) ТЬфу, не в тот раздел СП посмотрел и не на тот метод «ПолучитьCOMОбъект» =)))

Всем спасибо =)

   IKSparrow

12 — 02.06.14 — 16:33

Ну вот же гадство. Теперь Ошибка в получении объекта COM (0x80004002) Интерфейс не поддерживается. Что за фигня.

   IKSparrow

13 — 02.06.14 — 16:34

Процедура теперь на клиенте выполняется.

  

1cVandal

14 — 02.06.14 — 17:00

наКлиенте

Режим = РежимДиалогаВыбораФайла.Открытие;

    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

    ДиалогОткрытияФайла.ПолноеИмяФайла = «»;

    Фильтр = «Таблица(*.xlsx)|*.xlsx»;

    ДиалогОткрытияФайла.Фильтр                = Фильтр;

    ДиалогОткрытияФайла.МножественныйВыбор    = Ложь;

    ДиалогОткрытияФайла.Заголовок            = «Выберите файл c описью вложения»;

    
    Если ДиалогОткрытияФайла.Выбрать() Тогда

        ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;

    Иначе

        Возврат;

    КонецЕсли;

    
    Тз = объект.ТЗ;

    Тз.Очистить();

    //Тз.Колонки.Добавить(«ШК»);

    //Тз.Колонки.Добавить(«Сумма»);

    
    
    
    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(ПутьКФайлу);

        ExcelЛист = Excel.Sheets(1);

    Исключение

        Сообщить(«Не установлено приложение MS Excel!»);

        Возврат;

    КонецПопытки;

TurboConf — расширение возможностей Конфигуратора 1С

  1. Приветствую.

    Столкнулся с проблемой:
    Создал обработку, которая запускает Excel, читает файл, заполняет его и записывает.
    На клиенте все великолепно выполняется.
    Создал регламентное задание, которое запускает в определенное время это на сервере.
    При выполнении на сервере вылезает ошибка про то, что типа MS Excel не удалось получить доступ к файлу. При этом доподлинно известно, что ком. объект Excel даже не создался (нет его в процессах диспетчера задач).
    Примечательно, что если запустить обработку клиентом с машины, где установлен сервер 1С, то все выполняется.

    Excel = Новый COMОбъект("Excel.Application");
    Книга = Excel.WorkBooks.Open("D:DstOrder.xls");
    

    Чувствую, что дело тут в том, что при работе с клиента Excel запускается из-под пользователя в реальном сеансе, а в случае сервера — под пользователем хоть и с полными правами, но без запущенного сеанса.

    Сервер Windows Server 2008 R2 Standart. Service Pack 1
    Как это обойти?


  2. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    1) Файл D:DstOrder.xls действительно существует на сервере?
    2) У пользователя под которым запущен сервер есть право доступа к каталогу D:Dst?

  3. 1. Да, файл существует. Обработка при запуске на этом же сервере из-под клиента выполняется без проблем.
    2. Доступ есть. Пользователь — администратор. Пробовал файл в разные папки класть.

    — Объединение сообщений, 15 авг 2014

    Полный текст ошибки. Ошибка от имени Microsoft Excel, однако процесса EXCEL в диспетчере задач нет!

    Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Приложению Microsoft Excel не удается получить доступ к файлу «D:DstOrder.xls». Это может быть вызвано одной из следующих причин.

    • Указан несуществующий файл или путь.
    • Файл используется другой программой.
    • Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.

    — Объединение сообщений, 15 авг 2014

    8.3.4.496

    Последнее редактирование: 15 авг 2014

  4. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Т.е. сервер (ragent.exe и т.д.) стартует от имени Администратора? Или все же от USR1CV82 (не знаю как там по умолчанию под 8.3 пользователь называется).

  5. У меня пользователь USR1CV81 со старых времен. Он входит в группу Администраторы.

    Сейчас провел эксперимент. Зашел на сервер от имени этого пользователя и в клиенте запустил обработку — без проблем.

  6. Попробовал вместо COMОбъект использовать ПолучитьCOMОбъект. Вот результат

    Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221021(0x800401E3): Операция недоступна


  7. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104


  8. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104


  9. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104


    likalim и Mark768 нравится это.
  10. Спасибо тебе, добрый человек. Сам бы не допер…


  11. shurikvz

    Offline

    shurikvz
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.547
    Симпатии:
    344
    Баллы:
    104

    Да не за что.
    Не совсем я это, разум это коллективный.. :)

  12. Небольшое уточнение:
    При выборе «Текущий пользователь», обработка на сервере запускает Excel только в том случае, если на сервер выполнил вход кто-нибудь из пользователей.
    Если это условие не выполняется, то получаем ошибку:

    Ошибка при вызове конструктора (COMОбъект): -2147467262(0x80004002): Интерфейс не поддерживается

    На вкладке «Удостоверения» есть 3-й вариант запуска — указать конкретного пользователя и пароль.
    Я указал пользователя, от имени которого работает сервер 1С (USR1CV81).
    В таком варианте обработка запускает Excel при отсутствии работающих пользователей на сервере.
    Это меня устраивает.

    В моем случае не бывает работающих пользователей на сервере и тем более, запускающих Excel
    Могу предположить, что при запуске Excel любым пользователем (не USR1CV81) могут возникнуть проблемы.
    Например, Excel запускается и работает, однако при старте выдает «Невозможно использовать связывание и внедрение объектов».

  13. Приветствую.

    Когда в этой теме мне очень помогли. Восстановили сервер после аварии. Теперь восстанавливаю возможность работы пользователя USR1CV81 с Excel.
    Столкнулся с тем, что в Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM теперь нет ветки Microsoft Excel Application, хотя сам Excel установлен.
    Что я сделал не так?


  14. alexburn

    Offline

    alexburn
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.150
    Симпатии:
    560
    Баллы:
    204

    Переустанавливать эксель пробовали ?

  15. Да, уже несколько раз и разные версии.
    Вычитал в сети, что если нет ветки явно, то нужно в реестре найти его наименование в виде кода. В реестре нашел, но его кода в Настройка DCOM тоже нет.


  16. Ardak

    Offline

    Ardak

    Регистрация:
    21 дек 2015
    Сообщения:
    1
    Симпатии:
    1
    Баллы:
    1

    Вдруг кому понадобится
    Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты.


  17. limus80

    Offline

    limus80

    Регистрация:
    30 май 2013
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1

    важное как мне кажется дополнение
    ко всему вышесказанному надо добавить учетке права входа в качестве сервиса на компьютер
    без этого у меня не работало на W2K12R2


  18. Gucci76

    Offline

    Gucci76
    Опытный в 1С

    Регистрация:
    9 мар 2008
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26

    Здравствуйте.
    У меня похожая проблема, но только с ВОРДом
    В файловом варианте я могу Новый COMОбъект(«Word.Application»), а в клиент-серверном нет.
    Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM тут НЕ нашел ворда (открывал через команду «mmc comexp.msc /32»).


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Проблема не решилась
Изначально база лежит на сервере — Режим: Серверный (сжатие усиленное)
Выгрузил ее (для экспериментов) — Режим: Файловый (без сжатия)

Сделал ВнешнююОбработку
Все работает, открывается Excel, создается лист, выгружаются данные (да, действительно тот еще геморрой). Был безумно счастлив, но не долго…
Подключаю обработку к рабочей базе (на сервере) и…

На строке:

1C
1
ExcelПриложение = Новый COMОбъект("Excel.Application");

Получаю:

Ошибка при запуске Microsoft Excel.
{ВнешняяОбработка.ОтчетПоБанку.МодульОбъекта(70)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса : -2147221005(0x800401F3): Недопустимая строка с указанием класса

Попробовал так:

1C
1
ExcelПриложение = ПолучитьCOMОбъект("D:1.xlsx");

Получил:

Ошибка при запуске Microsoft Excel.
{ВнешняяОбработка.ОтчетПоБанку.МодульОбъекта(72)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени

Помогите, че за ерунда?

Перейти к контенту

Я
   IKSparrow

02.06.14 — 16:08

Код такой:

    Попытка

        Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла);

    Исключение

        ЗаписьЖурналаРегистрации(

            «#COM»,

            УровеньЖурналаРегистрации.Ошибка,

            ЭтотОбъект,

            «Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла): «+Объект.ИмяФайла,

            ОписаниеОшибки());

        Возврат;

    КонецПопытки;

Ошибка такая: Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени

Платформа вот такая: 8.3.4.482

Где ошибка?

   1cVandal

1 — 02.06.14 — 16:11

Объект.ИмяФайла что там?

   IKSparrow

2 — 02.06.14 — 16:11

(1) D:Книга1.xls

   1cVandal

3 — 02.06.14 — 16:14

Коннектор = ПолучитьCOMОбъект(Объект.ИмяФайла,»Excel.Application»);

а так?

   1cVandal

4 — 02.06.14 — 16:15

да и прежде чем его обрабатывать,попробуй закрой его

   IKSparrow

5 — 02.06.14 — 16:16

(3) Неа, теперь так Ошибка получения объекта COM: -2147221005(0x800401F3): Недопустимая строка с указанием класса. Вроде же всю жизнь было Excel.Application.

   salvator

6 — 02.06.14 — 16:20

(5) Эксель не установлен?

   1cVandal

7 — 02.06.14 — 16:20

(5) а он у тебя установлен? может код на сервере выполняется?

   IKSparrow

8 — 02.06.14 — 16:24

(6) Excel установлен.

Балин…. Ну да… В процедуре формы с директивой &НаСервере

   IKSparrow

9 — 02.06.14 — 16:25

А на сервере Excel’я нет. А у меня тонкий клиент. Стало быть мне только Excel на сервак ставить и без вариантов, да?

   RomaH

10 — 02.06.14 — 16:27

(9) почему? — читаешь таблицу на клиенте

пишешь её в формат 1С — любая коллекция

передаешь её на сервер

   IKSparrow

11 — 02.06.14 — 16:32

(10) ТЬфу, не в тот раздел СП посмотрел и не на тот метод «ПолучитьCOMОбъект» =)))

Всем спасибо =)

   IKSparrow

12 — 02.06.14 — 16:33

Ну вот же гадство. Теперь Ошибка в получении объекта COM (0x80004002) Интерфейс не поддерживается. Что за фигня.

   IKSparrow

13 — 02.06.14 — 16:34

Процедура теперь на клиенте выполняется.

  

1cVandal

14 — 02.06.14 — 17:00

наКлиенте

Режим = РежимДиалогаВыбораФайла.Открытие;

    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

    ДиалогОткрытияФайла.ПолноеИмяФайла = «»;

    Фильтр = «Таблица(*.xlsx)|*.xlsx»;

    ДиалогОткрытияФайла.Фильтр                = Фильтр;

    ДиалогОткрытияФайла.МножественныйВыбор    = Ложь;

    ДиалогОткрытияФайла.Заголовок            = «Выберите файл c описью вложения»;

    

    Если ДиалогОткрытияФайла.Выбрать() Тогда

        ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;

    Иначе

        Возврат;

    КонецЕсли;

    

    Тз = объект.ТЗ;

    Тз.Очистить();

    //Тз.Колонки.Добавить(«ШК»);

    //Тз.Колонки.Добавить(«Сумма»);

    

    
    
    Попытка

        Excel = Новый COMОбъект(«Excel.Application»);

        Excel.WorkBooks.Open(ПутьКФайлу);

        ExcelЛист = Excel.Sheets(1);

    Исключение

        Сообщить(«Не установлено приложение MS Excel!»);

        Возврат;

    КонецПопытки;

TurboConf — расширение возможностей Конфигуратора 1С

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

i am try to hook to outlook application from windows Service but getting an exception Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) here is my code.

   public void ItemSendEvent()
    {
        try
        {
           if (Process.GetProcessesByName(ApplicationConstants.OUTLOOK_PROCESS_NAME).Count() > 0)
                {
                    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                    outlookApplication = Marshal.GetActiveObject(ApplicationConstants.OUTLOOK_APPLICATION_NAME) as Microsoft.Office.Interop.Outlook.Application;
                    Microsoft.Office.Interop.Outlook.NameSpace nameSpace = outlookApplication.GetNamespace(ApplicationConstants.OUTLOOK_NAME_SPACE);
                    nameSpace.Logon("", "", Missing.Value, Missing.Value);
                    nameSpace = null;
                    outlookApplication.ItemSend += outlookApplication_ItemSend;
                }
                log.Info("Outlook Item Send event registered successfully.");
        }
        catch (System.Exception ex)
        {
            log.Error("Exception occurred while registering Outlook Item Send event. " + ex.Message);
        }
    }

but the same code when i launch it through Windows Form Application its working Fine. i gone through some site’s and they were saying that outlook object is not in ROT Table. what will be the solution.

asked Jun 2, 2016 at 10:58

Ravi Kanth's user avatar

0

Outlook, or any other Office app, cannot run in a Windows service even if your service is running as an interactive user. Only Extended MAPI (C++ or Delphi only) or an Extended MAPI wrapper like Redemption (I am its author — its RDO family objects) can be used in a service.

In your particular case, it looks like you are trying to trap the Application.ItemSend event. There is absolutely no reason to create a Windows service for that. Create a COM addin — it will be loaded by Outlook and run as long as Outlook itself is running in the same process in the same security context.

answered Jun 2, 2016 at 22:45

Dmitry Streblechenko's user avatar

4

Two common issues could cause this.

The first would be that you are running Visual Studio in Administrator mode and you are starting your program from within VS, and the Office application is not. To fix that, you need to run your Office application with elevated privileges, in Administrator mode, as well.

The second could be caused by the application not being fully started/loaded when you call Marshal.GetActiveObject(...).

answered Jun 2, 2016 at 11:14

gmiley's user avatar

gmileygmiley

6,4561 gold badge11 silver badges24 bronze badges

3

Old, but still significant thread.

I collided with this error when tried to access Outlook data using the MS example.

Treating the error in a Try / Catch block and offering the option of newing Outlook solves the problem:

const int ERROR_HRESULT_0x800401E3_MK_E_UNAVAILABLE= -2147221021;
        Outlook.Application application = null;
        // Check whether there is an Outlook process running.
        if (Process.GetProcessesByName("OUTLOOK").Any())
        {
            try
            {
                // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
                }
            }
            catch (Exception ex)
            {
                //This is the branch where you can get correctly the current Outlook instance
                if (ex.HResult == ERROR_HRESULT_0x800401E3_MK_E_UNAVAILABLE)
                {
                    application = new Outlook.Application();
                }
            }
        }
        else
        {
            application = new Outlook.Application();
        }

Although the newing trick functions, no other Outlook instance is created, as Outlook behaves like a Singleton.

I only tested it with Office 365 64 bits installed.

answered Nov 15, 2020 at 15:44

Marcelo Scofano Diniz's user avatar

you don’t need to have your application as a service to get it on the background …

if your winform work well, just put your winform in background running on the systray for instance

answered Nov 8, 2016 at 21:11

bobzer's user avatar

bobzerbobzer

891 silver badge7 bronze badges

i am try to hook to outlook application from windows Service but getting an exception Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) here is my code.

   public void ItemSendEvent()
    {
        try
        {
           if (Process.GetProcessesByName(ApplicationConstants.OUTLOOK_PROCESS_NAME).Count() > 0)
                {
                    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                    outlookApplication = Marshal.GetActiveObject(ApplicationConstants.OUTLOOK_APPLICATION_NAME) as Microsoft.Office.Interop.Outlook.Application;
                    Microsoft.Office.Interop.Outlook.NameSpace nameSpace = outlookApplication.GetNamespace(ApplicationConstants.OUTLOOK_NAME_SPACE);
                    nameSpace.Logon("", "", Missing.Value, Missing.Value);
                    nameSpace = null;
                    outlookApplication.ItemSend += outlookApplication_ItemSend;
                }
                log.Info("Outlook Item Send event registered successfully.");
        }
        catch (System.Exception ex)
        {
            log.Error("Exception occurred while registering Outlook Item Send event. " + ex.Message);
        }
    }

but the same code when i launch it through Windows Form Application its working Fine. i gone through some site’s and they were saying that outlook object is not in ROT Table. what will be the solution.

asked Jun 2, 2016 at 10:58

Ravi Kanth's user avatar

0

Outlook, or any other Office app, cannot run in a Windows service even if your service is running as an interactive user. Only Extended MAPI (C++ or Delphi only) or an Extended MAPI wrapper like Redemption (I am its author — its RDO family objects) can be used in a service.

In your particular case, it looks like you are trying to trap the Application.ItemSend event. There is absolutely no reason to create a Windows service for that. Create a COM addin — it will be loaded by Outlook and run as long as Outlook itself is running in the same process in the same security context.

answered Jun 2, 2016 at 22:45

Dmitry Streblechenko's user avatar

4

Two common issues could cause this.

The first would be that you are running Visual Studio in Administrator mode and you are starting your program from within VS, and the Office application is not. To fix that, you need to run your Office application with elevated privileges, in Administrator mode, as well.

The second could be caused by the application not being fully started/loaded when you call Marshal.GetActiveObject(...).

answered Jun 2, 2016 at 11:14

gmiley's user avatar

gmileygmiley

6,4561 gold badge11 silver badges24 bronze badges

3

Old, but still significant thread.

I collided with this error when tried to access Outlook data using the MS example.

Treating the error in a Try / Catch block and offering the option of newing Outlook solves the problem:

const int ERROR_HRESULT_0x800401E3_MK_E_UNAVAILABLE= -2147221021;
        Outlook.Application application = null;
        // Check whether there is an Outlook process running.
        if (Process.GetProcessesByName("OUTLOOK").Any())
        {
            try
            {
                // If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
                application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
                }
            }
            catch (Exception ex)
            {
                //This is the branch where you can get correctly the current Outlook instance
                if (ex.HResult == ERROR_HRESULT_0x800401E3_MK_E_UNAVAILABLE)
                {
                    application = new Outlook.Application();
                }
            }
        }
        else
        {
            application = new Outlook.Application();
        }

Although the newing trick functions, no other Outlook instance is created, as Outlook behaves like a Singleton.

I only tested it with Office 365 64 bits installed.

answered Nov 15, 2020 at 15:44

Marcelo Scofano Diniz's user avatar

you don’t need to have your application as a service to get it on the background …

if your winform work well, just put your winform in background running on the systray for instance

answered Nov 8, 2016 at 21:11

bobzer's user avatar

bobzerbobzer

891 silver badge7 bronze badges

  • Remove From My Forums
  • Question

  • I am trying to access Microsoft word instance through my service (windows service) but I am getting this error

    Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) ,

     I have opened word document ( i can also see WINWORD.EXE in Task Manager) ,

    I am using VS 2010 and MS Office 2003. Here is my code

    Dim fs As New FileStream("D:log.txt", FileMode.OpenOrCreate,
    FileAccess.Write)
    
                Dim sw As
    New StreamWriter(fs)
    
               
    sw.BaseStream.Seek(0, SeekOrigin.End)
    
                Dim
    wordapp As Word.Application
    
                wordapp = Marshal.GetActiveObject("Microsoft.Office.Interop.Word.Application")
    
                For Each
    doc As Word.Document In wordapp.Documents
    
                   
    sw.WriteLine(doc.FullName.ToString() + "n" +
    
                   
    doc.ActiveWindow.WindowState.ToString())
    
                Next
    
                sw.Flush()
    
                sw.Close()

    if i use this code in windows form application it works perfect, but doesn’t works in windows service.Why is that for ? Windows Service Doesn’t support Microsoft.Office.Interop ? If it does work please guide.

    • Moved by

      Tuesday, February 26, 2013 9:58 AM

Answers

  • As Ken mentioned — this is not supported so do not expect any real help for this on Microsoft forum. That said, ProgId you pass to Marshal.GetActiveObject is wrong, fix this.

    • Marked as answer by
      Quist Zhang
      Tuesday, March 5, 2013 10:53 AM
  • Even if you do succeed in somehow automating Word or another Office application in a Windows service it will break or fail at the worst possible moment. It’s just not relable, and if an error message or warning or other UI message
    is spawned that will hang your application compltely. What you want to do is really a very bad and unreliable thing to do.

    thanks,

    if Progid is wrong then why does this code works fine in windows form application ?


    Ken Slovak MVP — Outlook

    • Marked as answer by
      Quist Zhang
      Tuesday, March 5, 2013 10:53 AM

After searching on the web without success, here’s my question.

I’ve a task that i want to schedule to retrieve the attachment of an email from outlook and extract the data.
It works fine when I launch the task manually but whenever I try to launch it through a scheduled task it fails with the error :

COMException (0x800401E3): Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))

It occurs when the program tries to retrieve or create an instance of Outlook as follow:

private Application GetApplicationObject()
    {

        Application application = null;

        if (Process.GetProcessesByName("OUTLOOK").Any())
        {
            application = Marshal.GetActiveObject("Outlook.Application") as Application;
        }
        else
        {
            application = new Application();
        }
        return application;
    }

I tried several ways (batch file, .exe file, parameter from a program) but they all failed.
It was launched with the same account that was use to launch the task manually.

Can someone help me ? Any help would be appreciated!
Cheers!

asked Nov 5, 2015 at 12:05

A.Brg's user avatar

3

Microsoft does not currently recommend, and does not support, Automation of Microsoft Office applications from any unattended, non-interactive client application or component (including ASP, ASP.NET, DCOM, and NT Services), because Office may exhibit unstable behavior and/or deadlock when Office is run in this environment.

If you are building a solution that runs in a server-side context, you should try to use components that have been made safe for unattended execution. Or, you should try to find alternatives that allow at least part of the code to run client-side. If you use an Office application from a server-side solution, the application will lack many of the necessary capabilities to run successfully. Additionally, you will be taking risks with the stability of your overall solution. Read more about that in the Considerations for server-side Automation of Office article.

You may consider using a low-level API (or any other third-party wrappers) — Extended MAPI on which Outlook is based on. Or EWS in case of Exchange profiles, see EWS Managed API, EWS, and web services in Exchange for more information.

answered Nov 5, 2015 at 12:27

Eugene Astafiev's user avatar

Eugene AstafievEugene Astafiev

41.6k3 gold badges21 silver badges39 bronze badges

1

Just a couple of thoughts:

  1. It could be a GUI issue. According to this answer, GUI tasks cannot be run from scheduled tasks. There may be a workaround, but I am not aware of one.

  2. It could be a context or permission issue. What settings are you configuring in the task, and are they the same as when you run the task outside of task scheduler?

Community's user avatar

answered Nov 5, 2015 at 12:26

theMayer's user avatar

theMayertheMayer

15.1k7 gold badges56 silver badges87 bronze badges

1

Код такой: Ошибка такая: Ошибка получения объекта COM: -2147221014(0x800401EA): Не удается открыть файл при помощи специального имени Платформа вот такая: 8.3.4.482 Где ошибка?

да и прежде чем его обрабатывать,попробуй закрой его

Неа, теперь так Ошибка получения объекта COM: -2147221005(0x800401F3): Недопустимая строка с указанием класса. Вроде же всю жизнь было Excel.Application.

а он у тебя установлен? может код на сервере выполняется?

Excel установлен. Балин…. Ну да… В процедуре формы с директивой &НаСервере

А на сервере Excel’я нет. А у меня тонкий клиент. Стало быть мне только Excel на сервак ставить и без вариантов, да?

почему? — читаешь таблицу на клиенте пишешь её в формат 1С — любая коллекция передаешь её на сервер

ТЬфу, не в тот раздел СП посмотрел и не на тот метод «ПолучитьCOMОбъект» =)))

Ну вот же гадство. Теперь Ошибка в получении объекта COM (0x80004002) Интерфейс не поддерживается. Что за фигня.

Процедура теперь на клиенте выполняется.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Понравилась статья? Поделить с друзьями:
  • Ошибка получения ответа офд 128 разрыв соединения
  • Ошибка получения объекта com 2147024891 0x80070005 отказано в доступе
  • Ошибка получения ответа офд 113 разрыв соединения
  • Ошибка получения лицензии на приложение 33 компас windows 10
  • Ошибка получения обработки обслуживания при открытии смены 1с