Я пишу сервис C # Window для запуска на сервере (установлен с OFFICE)
Мне нужно преобразовать MS Word DOC в файл RTF и загрузить его в RICHTEXTBOX, и получить строку RTF и строку открытого текста в БД (получить строку открытого текста для полнотекстового индексирования, позволяющего пользователю выполнять поиск)
я использовал следующий код для выполнения конвертации в Сервисе,
Однако произошла ошибка на линии
newApp.Documents.Open
«Недостаточно памяти. Сохраните документ сейчас»
Я проверил диспетчер задач сервера и обнаружил, что Winword.exe загружает много памяти (говорит 60 ~ 70 Мб) и не выходит (ну, это исключение .....> _ <) </p>
Я пробовал один и тот же код, запущенный на той же машине с Windows Form, и он не получил ошибку.
и служба уже настроена как администратор.
private void doc2rtf(object Source, object Target)
{
//Creating the instance of Word Application
Word.Application newApp = new Word.Application();
newApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;
newApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
// specifying the Source & Target file names
// Use for the parameter whose type are not known or
// say Missing
object Unknown = Type.Missing;
object objReadOnly = true;
object objFalse = false;
try
{
// Source document open here
// Additional Parameters are not known so that are
// set as a missing type
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.Documents.Open", Source.ToString());
newApp.Documents.Open(ref Source, ref Unknown,
ref objReadOnly, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown, ref Unknown);
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.Documents.Open", Source.ToString());
// Specifying the format in which you want the output file
object format = Word.WdSaveFormat.wdFormatRTF;
//check header footer exists.
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.ActiveDocument.SaveAs", Target.ToString());
//Changing the format of the document
newApp.ActiveDocument.SaveAs(ref Target, ref format,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown, ref Unknown,
ref Unknown, ref Unknown);
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.ActiveDocument.SaveAs", Target.ToString());
}
catch (Exception e)
{
lw.writeLog(LogWriter.logType.ERROR, e.Message, "doc2rtf");
}
finally
{
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.ActiveDocument.Close(", "");
newApp.ActiveDocument.Close(ref objFalse, ref Unknown, ref Unknown);
// for closing the application
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.ActiveDocument.Close(", "");
lw.writeLog(LogWriter.logType.DEBUG, "before newApp.ActiveDocument.Quit(", "");
newApp.Quit(ref objFalse, ref Unknown, ref Unknown);
lw.writeLog(LogWriter.logType.DEBUG, "after newApp.ActiveDocument.Quit(", "");
newApp = null;
GC.Collect();
}
}