質問

MS Office 2007 .NET C#相互運用ライブラリをVistaで動作させる方法を知っている人はいますか?

Windowsサービスとして実行するように設定した.NET C#アプリケーションがあります。このプログラムは、状況に応じてWordまたはExcelのテンプレートを開き、その内容を変更してからドキュメントを保存します。これはすべて、Office 2007を使用してWindows Server 2003またはXPマシンで実行していたときはうまく機能しました。すべてをServer 2008ボックスに移動すると、すべてが機能しなくなりました。たとえば、Excelでは、ファイルが明確にある場合はExcelファイルを開くことができないことを通知するCOM例外が表示され、手動で実行すると問題なく開くことができます。 Windowsサービスは、マシンにログインするのと同じユーザーアカウントで実行されており、そのアカウントは管理者です。

誰が何をすべきか考えていますか?

役に立ちましたか?

解決

サーバー側のアプリとしてOfficeクライアントを実行することは本当に避けてください。ファイル形式としてxmlを使用することを検討してください(Office 2007の場合はxlsx、(多少)古いバージョンの場合はExcelブックxsdを使用します)。その後、サーバーでExcel APIを使用する必要がなくなります。

他のヒント

VistaおよびWindows Server 2008では、サービスはSession0と呼ばれるもので実行されます。 Vista以前は、通常のプログラムはサービスと一緒にSession0で実行されていました。

これは、Session0がデスクトップレスの荒れ地になり、サービスがexplorer.exeにアクセスすることさえできないことを意味します。問題は、Officeアプリケーションが通常デスクトップ上にあるいくつかのコンポーネントにアクセスできることを期待していることだと確信しています。

Excel、Wordなどはデスクトップセッションでのみサポートされているため、いくつかの選択肢しかありません。

  1. サービスのプロパティの[ログオン]タブで[デスクトップ]チェックボックスを設定し、Officeの神をなだめるように祈ります。 (おそらくないでしょう。)
    • 1を試した後、コードを調べて、クラッシュの原因となるものを削除または回避します。
  2. リモート処理/ WCFを使用して、相互運用作業を実行するサーバーを作成し、サービスと通信させます。
    • ログインするインタラクティブユーザーが必要であり、ユーザーはなんらかの方法でサーバーアプリケーションを起動する必要があります。おそらく自動起動を使用するのが最善です。
    • 自動ログインを有効にしてみてください。 http://support.microsoft.com/kb/324737
  3. CreateProcessAsUserと友人を使用して、ログインしているユーザーになりすましてみてください。
    • 注:ユーザーが実際にログインしない限り、これがどの程度うまく機能するかはわかりません。したがって、上記の2つ以上の有用性はなく、離脱するのははるかに困難です。 (P / Invokeが必要)
  4. OpenXML sdkを使用するようにプログラムを書き直すか、SpreadsheetGearなどを使用します。

インストール可能ファイルを入手してください http://www.microsoft。 com / downloads / details.aspx?FamilyID = 59daebaa-bed4-4282-a28c-b864d8bfa513& displaylang = en

システムにインストールし、ソリューションでExcel dllを参照します。うまくいけばうまくいきます。

サーバーにプライマリ相互運用機能アセンブリがインストールされていますか?これらは通常GACにあり、プログラムをビルドするときにbinディレクトリに含まれていないため、サーバーにローカルにインストールする必要があります。

これは単なる推測ですが、UACである可能性があります。特権(管理)アプリケーションとユーザーアプリケーションは、互いにメッセージを送信したり、何らかの方法で通信したりできないことを知っています。サービスは管理者として実行されていますが、デスクトップは同じユーザーであってもUACで通常のユーザーとして実行されています。また、起動時にOfficeの一部が起動(プリロード)され、通常のユーザーとして実行されることを期待しています。

UACをオフにして、それが役立つかどうかを確認してください。もしそうなら、少なくともあなたはそれが何であるかを知っています。

アカウントをマシンにログオンしたままにしますか? Officeはサーバーサイドアプリではないため、デスクトップコンテキストなしで実行可能ファイルを起動しようとすると、ランダムエラーが発生します。

Officeについて覚えておくべきこと。そのx86のみであるため、x64でアプリケーションを作成する場合、基礎となるCOMオブジェクトにアクセスすることはできません。 x86でアプリケーションをコンパイルする必要があります。それで動作します。

プロジェクトのプロパティに移動し、Visual Studioの[ビルド]タブで[x86]を選択することにより、これを実行できます。

これはすべて、アプリが開発中または実行中のx64環境であることを前提としています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top