Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于网站(文件转换)的Microsoft.Office.Interop安全吗?_C#_Asp.net_Security_Ms Word_Ms Office - Fatal编程技术网

C# 用于网站(文件转换)的Microsoft.Office.Interop安全吗?

C# 用于网站(文件转换)的Microsoft.Office.Interop安全吗?,c#,asp.net,security,ms-word,ms-office,C#,Asp.net,Security,Ms Word,Ms Office,我正在编写一个网站,用户必须添加报告(Word文档),为了能够查看它们,我将*.doc转换为*.pdf,然后通过pdf.js显示它们。对于转换,我使用Microsoft.Office.Interop.Word。代码看起来像 public void ConvertDocument(string PATH) { FileInfo FILE = new FileInfo(PATH); if (FILE.Extension.ToLower() == ".doc"

我正在编写一个网站,用户必须添加报告(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);
        }
}
  • 安全吗
  • 它将处理多少用户
  • 它需要什么资源
  • 我应该在服务器上安装MS Office来运行网站吗
  • 这真的是一个好方法吗

  • 微软的答案是否定的:

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

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

    • 当进程意外存在时,会留下大量Word实例,并且永远不会清理
    • 在处理会话中途关机后,Word installation已损坏
    • 它的可扩展性不太好——Word是一个大型桌面应用程序,它的功能非常出色;但是,它并不真正适用于您使用它的流程,因此,打开大量实例将消耗应用程序可以使用的资源
    但是,还有其他方法可以做到这一点,如中所述

    <>你可以考虑预转换Word文档——例如,当上传文档时,是否可以创建PDF呢?这样,您的服务器只是提供一个PDF文档,在服务请求时只需做很少的工作