используя слово в С #, почему всегда показывать диалоговое окно `` Сохранить как '' при закрытии

Я работаю над кодом, который пытается преобразовать документ Word в файл SWF.

Я так делаю:

  1. Я конвертирую текстовый документ в PDF-документ с помощью службы офисных компонентов.
  2. Я конвертирую PDF в SWF с помощью swftools.

Я сделал это на своем компьютере (64-разрядная версия, Windows Server 2008 R2, Office 2010), и она работает нормально, но когда я помещаю ее на сервер (64-разрядная версия, Windows Server 2008 R2, Office2010), появляется диалоговое окно «Сохранить как». будет отображаться, когда код пытается закрыть Word в программе, и независимо от того, нажимаю ли я «сохранить» или «отменить», он выдаст исключение «файл доступен только для чтения». Но на самом деле я не менял исходный файл, я просто открыл его и сохранил как документ PDF.

Вот код для преобразования Word в PDF:

bool ret = true;
        Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
        Microsoft.Office.Interop.Word.Document doc = null;
        object Unknown = Type.Missing;
        try
        {

            object Source = path;
            object Target = path.Substring(0, path.LastIndexOf(".")) + ".pdf";
            if (outpath != "")
                Target = outpath;
            object readOnly = true;
            object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
            doc = newApp.Documents.Open(ref Source, ref Unknown, ref readOnly,
                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);
            doc.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);
        }
        catch (Exception e)
        {
            ret = false;
        }
        finally
        {
            if (doc != null)
            {
                doc.Close(ref Unknown, ref Unknown, ref Unknown);
                //dialog shows up here
            }
            newApp.Quit(ref Unknown, ref Unknown, ref Unknown);
            GC.Collect();
        }

        return ret;

Какие-либо предложения?


person Jarvan    schedule 30.07.2013    source источник
comment
попробуйте удалить логику swf и просто конвертируйте текстовый документ в pdf, чтобы изолировать проблему. Если это работает на вашем производственном сервере, это означает, что что-то происходит с swftools на производстве.   -  person bazz    schedule 30.07.2013
comment
я уже сделал это, swftools отлично работает, потому что я пытаюсь преобразовать pdf в swf, и он отлично работает на сервере   -  person Jarvan    schedule 30.07.2013
comment
не уверен, что это изменит ситуацию, но попробуйте object Unkown=System.Reflection.Missing.Value, а не то, что у вас есть сейчас ...   -  person bazz    schedule 30.07.2013


Ответы (1)


Передайте false в качестве первого аргумента, и подсказка исчезнет

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.close(v=vs.80).aspx

person Matt Grabowski    schedule 30.07.2013