QA@IT
«質問へ戻る

質問を投稿

ASP.NETからEXCEL操作時にActiveX コンポーネントを作成できません。とエラー発生

ASP.NET(VS2012)にて、エクセルを作成するプロセスを起動させ、エクセル作成完了後、
ダウンロードするシステムを構築しました。

クライアントから行った場合、下記のところで、エラーが発生してしまいます。
一番下にうまくいくパターンも記載しておりますが、果たしてこの設定でいいのかご意見を頂ければと思います。

【aspx側からエクセル出力~ダウンロード】
oProcess = New Process
oProcess.StartInfo.FileName = ”エクセル作成プロセス名”
oProcess.StartInfo.Arguments = "日付等の引数"
oProcess.Start() '' 開始
oProcess.WaitForExit(20000) '' 処理の終了を待つ(タイムアウト時間あり)
oProcess = Nothing

If File.Exists("エクセルファイルフルパス") = True Then
'' ファイルが存在していればダウンロードを開始する
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(ファイル名).Replace("+", "%20"))
Response.Flush()
Response.TransmitFile("エクセルファイルフルパス")
Response.End()
End If

【エクセル作成プロセス_エラー発生個所】
objExcel = CreateObject("Excel.Application.15") 'New Excel.Application

《エラー内容》
System.Exception: ActiveX コンポーネントを作成できません。
場所 Microsoft.VisualBasic.Interaction.CreateObject(String ProgId, String ServerName)

【環境/構成】
〇ネット接続されていないローカルネットワーク
〇サーバ:Windows7 Professional(32bit)、IIS7.5、EXCEL2013
     ・アプリケーションプール→ASP.NET v4.0(統合)と、DefaultAppPool(Framework2.0/統合)
     ・エクセル起動するASPは複数あります。
     ・DCOMからMicrosoft Excel.Applicationの設定
      ⇒データが置かれているコンピューター上で。。。。チェック済み
      ⇒このコンピュータでアプリケーションを実行する。。。。チェック済み
      ⇒セキュリティタブは最終的にeveryoneのフルコントロールでもダメでした。
      ⇒対話ユーザー
     ・C:\Windows\System32\config\systemprofile\Desktop\フォルダ作成+admin権限付与
・Administratorsグループに、IIS AppPool\DefaultAppPoolとIIS AppPool\ASP.NET v4.0
      ユーザーを追加
     ・ASPアプリの設定として、認証は、匿名認証と基本認証のみ

・クライアント:Windows7 Ultimate(64bit)

【結果】
リモートデスクトップでログインしている状態だと、CreateObjectできました。
又、リモートデスクトップを閉じた状態で、対話ユーザーを起動起動ユーザーにすると、Createできました。
権限が怪しいので、リモートデスクトップを閉じた状態+対話ユーザーで、アプリケーションプールの
プロセスモデルのIDをApplicationPoolIdentityから、アドミン権限ユーザーに変更しましたがダメでした。
他の投稿でもある通り、ログオフだと対話ユーザーはダメみたいなので、これでいいのでしょうか。。。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34020&forum=7

ASP.NET(VS2012)にて、エクセルを作成するプロセスを起動させ、エクセル作成完了後、
ダウンロードするシステムを構築しました。

クライアントから行った場合、下記のところで、エラーが発生してしまいます。
一番下にうまくいくパターンも記載しておりますが、果たしてこの設定でいいのかご意見を頂ければと思います。


【aspx側からエクセル出力~ダウンロード】
oProcess = New Process
oProcess.StartInfo.FileName = ”エクセル作成プロセス名”
oProcess.StartInfo.Arguments = "日付等の引数"
oProcess.Start()                        '' 開始
oProcess.WaitForExit(20000)             '' 処理の終了を待つ(タイムアウト時間あり)
oProcess = Nothing

If File.Exists("エクセルファイルフルパス") = True Then
 '' ファイルが存在していればダウンロードを開始する
 Response.ContentType = "application/octet-stream"
 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(ファイル名).Replace("+", "%20"))
 Response.Flush()
 Response.TransmitFile("エクセルファイルフルパス")
 Response.End()
End If

【エクセル作成プロセス_エラー発生個所】
objExcel = CreateObject("Excel.Application.15") 'New Excel.Application

《エラー内容》
System.Exception: ActiveX コンポーネントを作成できません。
場所 Microsoft.VisualBasic.Interaction.CreateObject(String ProgId, String ServerName)


【環境/構成】
〇ネット接続されていないローカルネットワーク
〇サーバ:Windows7 Professional(32bit)、IIS7.5、EXCEL2013
     ・アプリケーションプール→ASP.NET v4.0(統合)と、DefaultAppPool(Framework2.0/統合)
     ・エクセル起動するASPは複数あります。
     ・DCOMからMicrosoft Excel.Applicationの設定
      ⇒データが置かれているコンピューター上で。。。。チェック済み
      ⇒このコンピュータでアプリケーションを実行する。。。。チェック済み
      ⇒セキュリティタブは最終的にeveryoneのフルコントロールでもダメでした。
      ⇒対話ユーザー
     ・C:\Windows\System32\config\systemprofile\Desktop\フォルダ作成+admin権限付与
         ・Administratorsグループに、IIS AppPool\DefaultAppPoolとIIS AppPool\ASP.NET v4.0
      ユーザーを追加
     ・ASPアプリの設定として、認証は、匿名認証と基本認証のみ

・クライアント:Windows7 Ultimate(64bit)

【結果】
**リモートデスクトップでログインしている状態だと、CreateObjectできました。**
又、リモートデスクトップを閉じた状態で、対話ユーザーを起動起動ユーザーにすると、Createできました。
権限が怪しいので、リモートデスクトップを閉じた状態+対話ユーザーで、アプリケーションプールの
プロセスモデルのIDをApplicationPoolIdentityから、アドミン権限ユーザーに変更しましたがダメでした。
他の投稿でもある通り、ログオフだと対話ユーザーはダメみたいなので、これでいいのでしょうか。。。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34020&forum=7