QA@IT

ASP⇒COM⇒ExcelオブジェクトでExcelファイルを操作する方法(CreateObjectでエラー)

8246 PV

いつもお世話になります。itaと申します。

現在、下記の環境に既存システムを移植していますが、自作COMの中からのExcelオブジェクトの作成が失敗しています。

既存システム環境
・OS:Windows Server 2003
・IIS:IIS6
・Excel:Excel 2003

移植システム環境
・OS:Windows Server 2012 R2
・IIS:IIS8.5
・Excel:Excel 2003

処理の概要:
Web上であるASP(TEST1.asp)の中から自作COM(sncom)を呼び、そのsncomの中でExcelを呼んでExcelファイルの書き込みを行う処理です。

TEST1.asp
|
+-- set obj=server.CreateObject("sncom") ' 自作COM

SNCOMの中で
1:Dim xlApp As Excel.Application
2:Set xlApp = CreateObject("Excel.Application")
3:
4:

2行目のCreateObjectでエラーが発生してしまいます。
サーバーへのExcelの登録関係が悪いのだろうと思いますが、どこをどう対応して良いかわかりません。

今まで確認した事を書きますので、アドバイス等をお願い致します。
1.既存システムでは正常に動作しています。
2.この自作COM自体は移植システム上でも動作しており、Excel以外の他の機能は実行できています。
3.2行目のCreateObjectでエラーが発生しているのは前後でログを取っているので、明白です。
4.移植システム環境上で、Excel2003は正常にインストールできており、勿論起動もできます。

IIS等の設定を行うことでCreateObjectが正常に通り、3行目以降の処理ができるようにするにはどんな設定が必要でしょうか?
拙い質問ですが、非常に困っております。対応方法のアドバイスをよろしくお願いいたします。

回答

いろいろ調べた結果、下記の対応でCreateObjectは実行できました。
1.コンポーネントサービスの設定を開く
下記を参照し、「mmc.exe comexp.msc /32」で開きました。
  参照 http://momoya.me.land.to/?pid=134

2.「コンポーネントサービス」-「コンピュータ」-「マイコンピュータ」-「DCOMの構成」
 の中から、「Microsoft Excel アプリケーション」を右クリックでプロパティを開き

3.「セキュリティ」タグの中の
 ・起動とアクティブ化のアクセス許可
 ・アクセス許可
 ・構成のアクセス許可
  のそれぞれに「IUSR」を追加し、すべての許可を与えました。

このことにより、CreateObject("Excel.Application")は実行できるようになりました。
ありがとうございました。

しかし、次にそのExcelObjを使い、Excelファイルを生成し保存する箇所で、エラーというか
待機状態になってしまい、困っています。
別スレッドに質問させて頂きます。

編集 履歴 (0)

思いつきなのでハズレの可能性大ですが・・・

Windows Server 2003 と Windows Server 2012 R2 の違いといえば、Windows Server 2008 から Session 0 分離というセキュリティ対策が取られたことがあります。詳しくは以下のページからダウンロードできる Word 文書を見てください。

Impact of Session 0 Isolation on Services and Drivers in Windows
https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn653293(v=vs.85).aspx

ワーカープロセスは Session 0 で動いていて、それから起動されるアプリも Session 0 で動く。Session 0 は noninteractive なので、"any attempt that a service makes to render graphics fails" となるそうです。

CreateObject("Excel.Application") がそれに該当するかといえば違うような気がしますが、とりあえず Session 0 分離という違いがあるというご参考まで。

編集 履歴 (0)
  • コメントありがとうございます。
    CreatObject("Excel.Application")が該当した場合は、このような使い方は不可となるのでしょうか?
    このSession 0分離を回避する方法はないのでしょうか?
    -
  • "any attempt that a service makes to render graphics fails" があたりだったら不可でしょうね。ワーカープロセスのアカウントを変えるという手があるかもしれません。でも、クラシック ASP でしたよね。そうするとすみませんが具体的にどうすればいいか自分には分かりません。 -
  • ところで、本件とは関係ないことで恐縮ですが、前に質問者さんが立てたスレッドがいくつか放置状態になってます。解決したのでしたらクローズしてください。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。