在Windows Server 2012上的办公自动化(互操作)(Office automation

2019-07-18 11:24发布

我成功地以Office文档转换为PDF文件使用办公自动化的Windows Server 2008 R2与Office 2007。 该代码是相当简单:

public class WordConvert
{
    /// <summary>
    /// Converts a word file to PDF
    /// </summary>
    /// <param name="sourceFilePath">The path of the word file to convert</param>
    /// <param name="targetFilePath">The path of the PDF output file</param>
    public static void ConvertWord(string sourceFilePath, string targetFilePath)
    {
        object objTragetFileName = targetFilePath;
        Word.Application wordDocument = new Word.Application();
        try
        {
            OpenWord(sourceFilePath, wordDocument);
            SaveAsPDF(ref objTragetFileName, wordDocument);
        }
        finally
        {
            CloseWord(wordDocument);
        }
    }

    private static void OpenWord(object sourceFileName, Word.Application wordDocument)
    {
        wordDocument.Documents.Open(ref sourceFileName);
    }

    private static void SaveAsPDF(ref object targetFileName, Word.Application wordDocument)
    {
        object format = Word.WdSaveFormat.wdFormatPDF;
        wordDocument.ActiveDocument.SaveAs(ref targetFileName, ref format);
    }

    private static void CloseWord(Word.Application wordDocument)
    {
        if (wordDocument != null)
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();

            // 2nd time to be safe
            GC.Collect();
            GC.WaitForPendingFinalizers();

            Word.Documents documents = wordDocument.Documents;
            documents.Close();
            Marshal.ReleaseComObject(documents);
            documents = null;


            Word.Application application = wordDocument.Application;
            application.Quit();
            Marshal.ReleaseComObject(application);
            application = null;
        }
    }
}

问题是,这段代码无法在Windows Server 2012中收到的错误是工作:

System.Runtime.InteropServices.COMException (0x800706BA): The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

运行代码作为交互式用户(控制台应用程序)工作正常,但是从IIS Web应用程序或Windows服务运行(即使有“alow服务与桌面交互”),当它失败。 运行该应用程序的用户有足够的权限(管理员)和代码工作正常使用Office 2010。

有任何想法吗?

Answer 1:

我可能会得到downvoted这个答案,但我在企业环境中,我们有一个使用办公自动化产品的工作,这是非常有问题的。

我已经做了研究在这个舞台上,和微软本身建议不要做办公自动化。

以下是直接从微软的MSDN知识库

Microsoft不推荐或支持Office的服务器端自动化。

微软目前并不提倡,不支持,Microsoft Office应用程序自动化从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT Service),因为Office可能会出现不稳定的行为和/或者当办公室在这种环境中运行死锁。

来源: http://support.microsoft.com/kb/257757



Answer 2:

发现的唯一的解决方案是让调用API办公室运行互动的过程。 它可以通过只是运行一个控制台应用程序(不适用于服务器解决方案中最亮的想法)或通过创建一些后台服务(例如,窗口服务),并设置它的站(SetProcessWindowStation)来完成。



Answer 3:

一看到错误消息的原因是,如果服务器缺少SYSWOW64文件夹。 下面的链接,可以帮助你更好地理解。

http://per.lausten.dk/blog/2011/04/excel-automation-on-windows-server-2008-x64.html



文章来源: Office automation (Interop) on Windows Server 2012