【问题标题】:Is Microsoft.Office.Interop safe to use for (file-converting) for a website?Microsoft.Office.Interop 是否可以安全地用于网站(文件转换)?
【发布时间】:2013-05-27 20:30:45
【问题描述】:

我正在编写一个关于女巫用户必须添加报告(Word 文档)并使其能够查看它们的网站,我将 *.doc 转换为 *.pdf,然后通过 pdf.js 显示它们。对于转换,我使用 Microsoft.Office.Interop.Word。代码看起来像

public void ConvertDocument(string PATH)
    {
        FileInfo FILE = new FileInfo(PATH);

        if (FILE.Extension.ToLower() == ".doc" || FILE.Extension.ToLower() == ".docx" || FILE.Extension.ToLower() == ".docm" || FILE.Extension.ToLower() == ".dotx" || FILE.Extension.ToLower() == ".dotm")
        {
            if (FILE.Length == 0)
            {
                return;
            }

            object oMissing = System.Reflection.Missing.Value;
            Word.Application word = new Word.Application();

            try
            {
                word.Visible = false;
                word.ScreenUpdating = false;

                Object filename = (Object)FILE.FullName;
                Word.Document doc = word.Documents.Open(ref filename, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                try
                {
                    doc.Activate();
                    object outputFileName = FILE.FullName.Replace(FILE.Extension, ".PDF");
                    doc.SaveAs(ref outputFileName, Word.WdSaveFormat.wdFormatPDF, ref oMissing, ref oMissing,
                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                               ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                               ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                }

                finally
                {
                    object saveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;
                    ((Word._Document)doc).Close(ref saveChanges, ref oMissing, ref oMissing);
                    doc = null;
                }
            }

            finally
            {
                ((Word._Application)word).Quit(ref oMissing, ref oMissing, ref oMissing);
                word = null;
            }

            File.Delete(PATH);
        }
}
  1. 这样安全吗?
  2. 它将处理多少用户?
  3. 它需要什么资源?
  4. 我应该在服务器上安装 MS Office 来运行网站吗?
  5. 这真的是一个好方法吗?

【问题讨论】:

    标签: c# asp.net security ms-word ms-office


    【解决方案1】:

    微软给出的答案是否定的:

    微软目前不推荐也不支持, 无人值守的 Microsoft Office 应用程序自动化, 非交互式客户端应用程序或组件(包括 ASP、 ASP.NET、DCOM 和 NT 服务),因为 Office 可能表现出不稳定 Office 在此环境中运行时出现的行为和/或死锁。

    来自Considerations for Server-Side Automation of Office

    根据经验,以下是我们遇到的问题:

    • 当进程意外存在时,会留下大量 Word 实例,并且永远不会清理
    • 在处理会话中途关闭后,Word 安装损坏
    • 它不能很好地扩展 - Word 是一个大型桌面应用程序,它的功能非常出色;但是,它并不真正适用于您正在使用它的进程,因此,打开它的大量实例会消耗您的应用程序可以使用的资源。

    不过,还有其他方法可以做到这一点,如 this StackOverflow question and answers 中所述

    您可以考虑预先转换word文档-例如,是否可以在上传文档时同时创建PDF?这样一来,您的服务器只是提供一个 PDF 文档,并且在服务请求方面只需要做很少的工作。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2015-05-22
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2018-06-13
      • 2023-02-02
      相关资源
      最近更新 更多