muneebalikiyani Ответов: 2

Microsoft.Офис.Ошибка взаимодействия 0x800401E3


Я пытаюсь получить доступ к экземпляру Microsoft word через свою службу, но получаю эту ошибку
Операция недоступна (исключение из HRESULT: 0x800401E3 (MK_E_UNAVAILABLE)) ,
Я открыл документ word ( я также могу видеть WINWORD.EXE в Диспетчере задач) ,
Я использую VS 2010 и MS Office 2003. Вот мой код

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("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()


если я использую этот код в приложении windows form, он работает идеально, но не работает в службе windows.Зачем это нужно ? Служба Windows не поддерживает Microsoft.Офис.Взаимодействие ? Если это действительно работает, пожалуйста, направьте.

ArunAmalraj

Здравствуйте muneebalikiyani,

Проверьте наличие прав пользователя.

Это не будет работать, если...ваше приложение работает от имени администратора и WINWORD с обычными правами пользователя.

muneebalikiyani

спасибо , но что я могу сделать, чтобы это сработало

2 Ответов

Рейтинг:
2

Bernhard Hiller

Запустите свою службу с вашими учетными данными - в противном случае она не сможет получить доступ к Word, работающему с вашими учетными данными.


fjdiewornncalwe

Мой 5.

muneebalikiyani

Я сделал это также , я думаю, что Marshall.getactiveobject() не работает для служб windows, пожалуйста, поправьте меня, если я ошибаюсь

Member 11615348

Даже я получаю ту же ошибку:
Операция недоступна (исключение из HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))

Я использую VS 2015. Может ли кто - нибудь помочь в этом деле?

pawan2261872

Возможно, ваш visual syudio работает в режиме администратора.
И visual studio, и приложение выборки(word) должны находиться в одном и том же режиме.

Рейтинг:
2

Member 13769719

Add reference only of "Microsoft.Office.Interop.Excel.dll"
try
        {
 //This requires excel app (excel.exe*32) to be running means any excel sheet should be open. If excel not running then it will throw error.
            excelApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
            excelApp.Visible = false;
        }
        catch
        {
            //create new excel instance
            excelApp = new Excel.Application();
            excelApp.Visible = false;
        }
This worked for me.
Advantage: No need to copy Microsoft.Office.Interop.Excel.dll to your installed foler. Since MS excel is installed it will take from GAC.

I used Office.dll too but not sure if its really required.


Richard MacCutchan

Речь идет об использовании MSWord, а не Excel. На него тоже ответили пять лет назад.