Вопрос

Мне хорошо известна статья базы поддержки Microsoft, в которой говорится, что автоматизация пользовательского интерфейса офисных продуктов не поддерживается.Кажется, что Windows Server 2008 x64 и Excel 2007. обеспечить выполнение данного заявления.

Я запускаю следующий код в методе OnStart службы NT (учетная запись локальной системы).Все, что он делает, — это автоматизация Excel, как он работает, когда вы запускаете тот же код в консольном приложении.

Предоставленный код состоит из двух частей.Первая часть запускает Excel, создает новую рабочую книгу и сохраняет ее в файле с заданным именем.Вторая часть запускает новый экземпляр Excel и открывает данный файл.Операция открытия заканчивается этим исключением:

Службу невозможно запустить.System.Runtime.InteropServices.COMException (0x800A03EC):Microsoft Office Excel не может получить доступ к файлу «c: emp est.xls».Есть несколько возможных причин:

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

Почему автоматизированный Excel может запускать и записывать файлы на диск, но терпит неудачу, когда его просят «просто» открыть существующий файл?

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\\temp\\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
Это было полезно?

Решение

Решение действительно простое.Ветку форума msdn можно найти здесь

Короче говоря, я публикую решение здесь, заслуга принадлежит Х Огава

Это решение...

・Windows 2008 Сервер x64

Пожалуйста, сделайте эту папку.

C:\Windows\SysWOW64\config\systemprofile\Рабочий стол

・Windows 2008 Сервер x86

Пожалуйста, сделайте эту папку.

C:\Windows\System32\config\systemprofile\Рабочий стол

...вместо dcomcnfg.exe.

Эта операция устранила проблемы автоматизации делопроизводства в моей системе.

Папка «Рабочий стол», по-видимому, необходима в папке системного профиля, чтобы открыть файл в Excel.

Он исчезает из Windows2008, Windows2003 имела папку, и я думаю, что это вызывает эту ошибку.

Другие советы

Также, как указано в источнике, вам необходимо установить правильные права для папки «Рабочий стол».У меня это сработало в 64-битной версии Windows 2008 и 32-битной версии Office 2010.

  1. Создайте каталог «C:\Windows\SysWOW64\config\systemprofile\Desktop» (для 64-разрядной версии Windows) или «C:\Windows\System32\config\systemprofile\Desktop» (для 32-разрядной версии Windows).

  2. Назначьте пользователю «Сетевые службы (Service Réseau)» следующие права на созданную папку:

Чтение и выполнение, список содержимого папки, чтение

Джон.

Я довольно часто обнаруживал, что вызова Quit() недостаточно для освобождения ресурсов.Попробуйте добавить:-

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

между оператором Quit() и установкой для него значения null.

Существует гораздо больше ошибок, чем упомянутая, и которые вам придется устранить, чтобы заставить Excel работать в 64-разрядной версии Windows Server 2007.Видеть шаги, которые я разработал после работы над этим два полных дня!

Если вы используете Apache, вам также может потребоваться выполнить следующие действия, чтобы заставить MS Word работать правильно (наряду со всем, что описано в других ответах):

Ниже приведен снимок экрана, показывающий два диалога, которые вам нужно будет открыть:enter image description here

Для Апача:

Службы-> Apache-> Щелкните правой кнопкой мыши (Свойства) -> Вкладка «Вход в систему».

MS Word:

Запустите dcomcnfg.exe->Корень консоли->Службы компонентов->Компьютеры->Мой компьютер->Конфигурация DCOM->Найти приложение Microsoft->Правый клик (Свойства)->Вкладка «Идентификация».

**если вы не можете найти MS Word, убедитесь, что вы запускаете правильную конфигурацию DCOM (64-битная или 32-битная) в зависимости от того, какая версия Office у вас установлена.

Здесь есть два варианта: вы можете настроить Apache на использование Локальная системная учетная запись и установите флажок РАЗРЕШИТЬ взаимодействие с рабочим столом.Если вы это сделаете, вам необходимо установить Личность для MS Word Интерактивный пользователь.

В противном случае вам необходимо назначить одного и того же пользователя (в идеале пользователя, вошедшего в систему), как показано на рисунке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top