C # Service Word "Недостаточно памяти. Сохраните документ сейчас" - PullRequest
1 голос
/ 21 июля 2011

Я пишу сервис 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();
        }
    }

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Если вы используете Windows Server 2008 (или, возможно, также Windows 7), то посмотрите мой ответ на этот вопрос . Это может помочь.

1 голос
/ 21 июля 2011

Это сообщение об ошибке так же бесполезно, как и получается.Это может означать проблему с разрешениями, антивирусную программу, несовместимую с Office, то, что вы размещаете ее в IIS или что вы делаете что-то массово и вам нужно время от времени вызывать Thread.Sleep, чтобы асинхронная обработка Word могла перехватитьвверх.Это также может означать поврежденный шаблон документа.Возможности кажутся такими же бесконечными, как и шаги по устранению неполадок, необходимые для их разрешения.

Но что-то должно было измениться, когда вы успешно запустили его в WinForm.У меня проблема с разрешениями - убедитесь, что учетная запись, под которой работает ваша служба, имеет доступ к файлу, который вы пытаетесь открыть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...