web-dev-qa-db-ja.com

「コンポーネントのCOMクラスファクトリを取得しています...エラー:80070005アクセスが拒否されました。」 (HRESULTからの例外:0x80070005(E_ACCESSDENIED))

単純なアプリケーションを作成し、IIS6.でホストしました。コードでは、Excelオブジェクトをインスタンス化しています。

using Excel = Microsoft.Office.Interop.Excel.Application;

namespace TestHosting
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Excel excelObj=new Microsoft.Office.Interop.Excel.Application();
        }
    }
}

それは私に次のエラーを与えます

 "Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied." (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

システム構成:

Windows Server 2008、64ビットのエンタープライズエディション Service Pack 2

私はインターネットで見つけた多くの可能な解決策を試しましたが、それらのどれも私のために働いていませんでした。

私が試したいくつかの解決策は以下です

1)パス "C:\ Windows\SysWOW64\config\systemprofile"でデスクトップアプリケーションを作成2)DCOMCNFGでMicrosfot.EXcelApplicaitonの完全な権限/制御を設定3)タスクマネージャーですべてのExcelインスタンスを削除

この点で私を助けてください、これは単なるサンプルアプリですが、私の元のアプリでは主にExcelから/へのデータの読み取りと書き込みについてです。

26
Ram
  1. サーバーにOfficeランタイムがインストールされていることを確認してください。
  2. Windows Server 2008を使用している場合、オフィスの相互運用機能を使用するのは長大な構成であり、手順は次のとおりです。

より良いのは、Open XMLに移行するか、以下のように構成することです

  • MS Office Pro最新版をインストールします(2010 Proを使用しました)
  • ユーザーExcelUserを作成します。管理者グループでWordUserを割り当てる
  • コンピューターに移動->管理
  • 以下のオプションでユーザーを追加
  • ユーザーオプションのパスワードは無期限
  • パスワードは変更できません

Com +の構成

  • [コントロールパネル]-> [管理者]-> [コンポーネントサービス]-> [DCOM構成]に移動します。
  • Microsoft Word 97-2003のプロパティを開く
  • 一般->認証レベル:なし
  • セキュリティ-> 3つすべての権限をカスタマイズして、全員に許可します
  • ID->このユーザー-> ExcelUser/passwordを使用
  • Excelアプリを起動して、すべてが正常であることを確認します

3. DCOM ConfigでMicrosoft Excelアプリケーションのセキュリティ設定を変更します。

[コントロールパネル]-> [管理ツール]-> [コンポーネントサービス]-> [コンピューター]-> [myComputer]-> [DCOM構成]-> [Microsoft Excelアプリケーション]。

右クリックしてプロパティダイアログを取得します。 [セキュリティ]タブに移動し、権限をカスタマイズします

こちらの投稿を参照してください: Excelオブジェクトの作成中のエラーCOMを使用したWCFでのExcel操作

39
bot

場合によっては、新しいアプリケーションプールを作成しても、DCOMCNFGで解決できないことがあります。次に、別の方法があります:

アプリケーションプールのIdentity(モデル名)をLocalSystemに設定します。

私は根本原因を知りませんが、それは私の問題を一度解決します。

32
Luis Sérgio

応答するには遅すぎます。しかし、これがまだ問題に直面している人を助けるなら。私はこれを修正しました:

→サイトを共有プールではなく専用プールに設定します。

→32ビットアプリケーションのサポートを有効にします。

→アプリケーションプールのIDをLocalSystemに設定します。

5
Hardik V.
  1. IISユーザーまたはグループユーザーに読み取り/書き込み許可を与える

  2. スタート->実行-> inetmgr

    デフォルトWebサイトのASP.NET認証を有効にします

3. 64ビット(x64)の場合、次のフォルダーを作成します:C:\ Windows\SysWOW64\config\systemprofile\Desktop

32ビット(x86)の場合、次のフォルダーを作成します:C:\ Windows\System32\config\systemprofile\Desktop

Windowsサービスがsystemprofileで実行されている場合、デスクトップフォルダーが必要です。このフォルダーは、XP以前のWindows Serverバージョンで自動的に作成されましたが、VistaおよびWindows 2008 Serverでは作成されませんでした。

3

私のために働いた解決策は、アプリケーションプールが起動されているユーザーを変更することです(ApplicationPoolIdentityには明らかにCOMオブジェクトにアクセスするための十分な権限がありません)。

幸運を!

3
Milos

次のことを試してください。

  1. Office相互運用機能アセンブリがインストールされていることを確認してください。
  2. 開発および実動でアセンブリのバージョンを確認します。
  3. Systemprofileの下にデスクトップフォルダを作成します。
  4. サービスユーザーのDCOMセキュリティを明示的に設定します。

詳細を見つけることができます here

3
user3140982

個人的に、私はこれらの正確なステップを実行しました:

*相互運用機能アセンブリのインストール:MicrosoftのWebサイトからインストールできます https://www.Microsoft.com/en-us/download/details.aspx?id=3508&tduid=(09cd06700e5e2553aa540650ec905f71)(256380) (2459594)(TnL5HPStwNw-yuTjfb1FeDiXvvZxhh.RQ)()

*アセンブリバージョンの確認:開発マシンと実稼働マシンのアセンブリのバージョンを確認します。アセンブリはGACにあります。未亡人7では、このフォルダーは%windir%\ Assemblyです。

*デスクトップフォルダーの作成:サービスはsystemprofileの下のデスクトップフォルダーを使用するため、フォルダーがない場合はこのフォルダーを作成する必要があります。フォルダーの場所は次のとおりです。64ビットアプリケーションの場合:C:\ Windows\SysWOW64\config\systemprofile\Desktop 32ビットアプリケーションの場合:C:\ Windows\System32\config\systemprofile\Desktop

* DCOMユーザー権限を追加します。
---実行ウィンドウを起動し、「dcomcnfg」と入力します。
---コンポーネントサービスの展開->コンピューター->マイコンピューター-> DCOM構成。
--- Microsoft Excelアプリケーションを探します。それを右クリックしてプロパティを選択し、[セキュリティ]タブを選択します。
---「起動許可とアクティベーション許可」および「アクセス許可」の下の「カスタマイズ」ラジオボタンを選択し、両方の「編集」ボタンをクリックして、次のようにユーザーを追加します。
--------- [追加]ボタンとユーザー 'IIS_IUSRS'および 'NETWORK SERVICE'をクリックし、完全な権限を付与します。
--- [ID]タブに移動し、[インタラクティブユーザー]オプションを選択します。
--- [適用]をクリックして[OK]をクリックします。

2
IsaacBok

サーバーにExcelがインストールされていますか?使用している相互運用インターフェースは、Excelアプリケーションのインストールが必要なautomateExcelに使用されます。各ページリクエストサイクルは、Excel.exeの個別のインスタンスを起動する可能性があります。これをWebアプリケーションの一部として行うことは強くお勧めします。

なぜこれをしたいのですか? Excelドキュメントを生成する場合は、muchより良い方法があります。このスレッドの他の場所で言及されているOpenXMLも含まれます。 サーバーでExcelを実行しないでください!

OpenXML SDKダウンロードへのリンク: http://www.Microsoft.com/en-us/download/details.aspx?id=5124

2
Richard Cook

簡単なアプリケーションを作成しました

アプリケーションのターゲットプロセッサは何ですか?私はそれがx86だと推測しているので、x64またはanycpuに設定します。

あなたが抱えている問題は、64ビットプロセスが32ビットDLLにアクセスしようとしているためだと思います。

また、ターゲットプロセッサを変更できない場合は、IISのアプリケーションプール設定から32ビットアプリケーションを有効にしてみてください。

1
Fraser

[〜#〜] npoi [〜#〜] を使用して、Excelを読み書きします。無料でオープンソース

例えば

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

//.....

private void button1_Click(object sender, EventArgs e)
{
    HSSFWorkbook hssfwb;
    using (FileStream file = new FileStream(@"c:\test.xls", FileMode.Open, FileAccess.Read))
    {
        hssfwb= new HSSFWorkbook(file);
    }

    ISheet sheet = hssfwb.GetSheet("Arkusz1");
    for (int row = 0; row <= sheet.LastRowNum; row++)
    {
        if (sheet.GetRow(row) != null) //null is when the row only contains empty cells 
        {
            MessageBox.Show(string.Format("Row {0} = {1}", row, sheet.GetRow(row).GetCell(0).StringCellValue));
        }
    }
}  

こちらをご覧ください Stackoverflow question

1
sangram parmar

http://www.vbforums.com/showthread.php?657928-failed-due-to-the-following-error-80070005-Access-is-denied

このリンクを使用して、Excel、Wordオブジェクトの「アクセス拒否」問題を解決できます。これは本当に便利なリンクです

1
Madhu

これは許可の問題のようです。 processMonitorを実行して、必要な許可を決定することをお勧めします。

1
Mike

2日前にこの問題に出くわし、完全に2日間を費やしたため、DCOMCNFGでIUSRユーザーグループへのアクセス権を与える必要があることがわかりました->マイコンピューターのプロパティ-> Comセキュリティ->起動とアクティベーションのアクセス許可- >デフォルトを編集し、IUSRにすべての権限を付与します。

それが誰かを助けることを願っています...

0
harshal H

これを使って

管理グループにユーザーを作成します

以下のように、このユーザーの詳細をWeb設定に追加します

<system.web>
   <identity impersonate="true"
    userName="User Name"
    password="Password" />
    `enter code here`</system.web>

IISを再起動して、もう一度確認してください

-トニー-

0
Tony