Код для автоматизации Excel .Net содержит ошибку «Катастрофический сбой» из-за взаимодействия на новом сервере [закрыто]

Я перехожу с компьютера Windows Server 2008 R2 с Excel 2003 на другой компьютер под управлением Windows Server 2012 R2 с Excel 2013.

Частью миграции является перемещение кода, который считывает текстовые файлы и выводит файлы Excel. запустив Excel в фоновом режиме. Это программы .Net 2.0, написанные кем-то, кого сейчас нет (я мог бы связаться с автором, но у меня нет бюджета, чтобы попросить о помощи ... Я должен заплатить вам, дорогой читатель!)

Каталоги Инструменты и входные файлы одинаковы на обеих машинах, и когда я запускаю команду на старом сервере, он записывает файл Excel за несколько секунд. Когда я запускаю его на новом сервере, он выдает следующую ошибку:

Unhandled Exception: System.Runtime.InteropServices.COMException (0x8000FFFF): Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at Microsoft.Office.Interop.Excel.ApplicationClass.get_Hinstance()
   at Pareto_Reports_v10dot5.Pareto_Reports.Main(String[] args)

ProcessExplorer показывает новый процесс Excel - поэтому инструмент дошел до его запуска - с помощью этой командной строки:

"C:\Program Files\Microsoft Office\Office15\EXCEL.EXE" /automation -Embedding

Когда я просматриваю сообщение об ошибке «Катастрофический сбой», я вижу сообщения о IIS и коде в разработке, но я запускаю исполняемый файл working-in-other-environment из командной строки - эти другие сообщения, похоже, не применимы.

Если вам нужна дополнительная информация, просто спросите ...

Изменить - старая машина имеет версии .Net 2.0.50727.4927 и 3.0.30729.4926 и 3.5.30729.4926

На новой есть версии 2.0.50727.4927 и 3.0 .30729.4926 и 3.5.30729.4926 и 4.0.0.0 и 4.5.51641 (все версии просматриваются из regedit)

У меня нет исходного кода. Спросит о получении; если он все еще существует, то этот вопрос немного изменится.

Надеялся, что это простая проблема какой-то новой функции безопасности в Excel 2013 или Windows 2012, но, видимо, не все так просто.

0
задан 13 December 2016 в 19:09
1 ответ

Было две точки отказа:

Вызов Interop.Excel.ApplicationClass.Calculate () вызвал в книге что-то, для чего требовался модуль VBAProject » Общие элементы управления Microsoft Windows 6.0 (SP6) ". Я смог перенести это со старого сервера, запустив это на новом сервере:

cd C:\Windows\SysWOW64
copy \\Old-server\C$\Windows\SysWOW64\MSCOMCTL.OCX .
regsvr32 MSCOMCTL.OCX

Второй сбой потребовал изменения исходного кода C #. При попытке зарегистрировать значение Interop.Excel.ApplicationClass.Hinstance генерировалось исключение. Я не знаю, что такое Hinstance и почему он исчез, но поскольку код ничего не делал с ним, кроме регистрации значения, его стирание устранило эту проблему.

0
ответ дан 5 December 2019 в 09:05

Теги

Похожие вопросы