2

OfficeドキュメントをPDFに変換するために、Office2007を搭載したWindowsServer2008R2でOfficeオートメーションを正常に使用しています。コードはかなり単純です:

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;
        }
    }
}

問題は、このコードがWindowsServer2012では機能しないことです。受け取ったエラーは次のとおりです。

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

対話型ユーザー(コンソールアプリ)としてコードを実行することは正常に機能しますが、IIS WebアプリまたはWindowsサービスから実行すると失敗します(「デスクトップと対話するためのサービスが少ない」場合でも)。アプリを実行しているユーザーには十分な権限(管理者)があり、コードはOffice2010で正常に機能します。

何か案は?

4

3 に答える 3

4

私はおそらくこの答えに反対するでしょうが、私はOffice Automationを使用する製品があるエンタープライズ環境で働いており、それは非常に問題があります。

私はこの分野で調査を行ってきましたが、Microsoft自体がOfficeオートメーションを行うことを推奨していません。

以下は、MicrosoftのMSDNナレッジベースから直接引用したものです。

Microsoftは、サーバー側のOfficeの自動化を推奨またはサポートしていません。

また

Officeは不安定な動作を示す可能性があるため、Microsoftは現在、無人の非対話型クライアントアプリケーションまたはコンポーネント(ASP、ASP.NET、DCOM、およびNTサービスを含む)からのMicrosoftOfficeアプリケーションの自動化を推奨していません。または、Officeがこの環境で実行されている場合はデッドロック。

ソース:http ://support.microsoft.com/kb/257757

于 2013-01-20T15:08:39.667 に答える
0

見つかった唯一の解決策は、OfficeAPIを呼び出すプロセスをインタラクティブとして実行することです。これは、コンソールアプリ(サーバーソリューションの最も優れたアイデアではありません)を実行するか、バックグラウンドサービス(Windowsサービスなど)を作成してステーションを設定する(SetProcessWindowStation)ことで実行できます。

于 2013-03-18T06:34:32.280 に答える
0

エラーメッセージが表示される理由の1つは、サーバーにSysWow64フォルダーがない場合です。ここにあなたがよりよく理解するのを助けるかもしれないリンクがあります。

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

于 2016-04-22T12:50:00.607 に答える