IT

"COM 클래스 공장에서 구성 요소를 검색하는 중...오류: 80070005 액세스가 거부되었습니다." (HRESULT: 0x80070005(E_ACCESSDENIED))

itgroup 2023. 4. 28. 20:29
반응형

"COM 클래스 공장에서 구성 요소를 검색하는 중...오류: 80070005 액세스가 거부되었습니다." (HRESULT: 0x80070005(E_ACCESSDENIED))

방금 간단한 응용 프로그램을 만들고 IIS 6.0에서 호스팅했습니다.코드에서 저는 단지 엑셀 오브젝트를 인스턴스화하고 있습니다.

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)).

시스템 구성:

윈도우즈 서버 2008, 64비트가 포함된 Enterprise Edition.서비스 팩 2

저는 인터넷에서 찾을 수 있는 많은 가능한 해결책들을 시도했지만, 그 중 어떤 것도 저에게 도움이 되지 않았습니다.

제가 시도한 몇 가지 해결책은 아래와 같습니다.

경로 "C:" 아래에 데스크톱 응용 프로그램을 만드는 중\Windows\SysWOW64\config\systemprofile" 2) Microsoft foot에 대한 전체 권한/제어 설정.DCOMCNFG의 EXCel 응용 프로그램 3) 작업 관리자에서 모든 Excel 인스턴스 제거

이와 관련하여 저를 도와주세요, 이것은 단지 샘플 앱이지만, 제 원래 앱에서는 대부분 엑셀에서 데이터를 읽고 쓰는 것입니다.

  1. 서버에 Office 런타임이 설치되어 있는지 확인합니다.
  2. 윈도우즈 서버 2008을 사용하는 경우 사무실 인터럽트를 사용하는 것은 긴 구성이며 다음 단계가 있습니다.

Open XML로 이동하거나 아래와 같이 구성할 수 있습니다.

  • MS Office Pro 최신 버전 설치(2010 Pro 사용)
  • 사용자 Excel 사용자를 만듭니다.관리 그룹에서 Word 사용자 할당
  • 컴퓨터로 이동 -> 관리
  • 아래 옵션으로 사용자 추가
  • 사용자 옵션 암호가 만료되지 않음
  • 암호를 변경할 수 없음

Com+ 구성

  • 제어판 - > 관리자 - > 구성요소 서비스 - > DCOM 구성으로 이동합니다.
  • Microsoft Word 97 - 2003 속성 열기
  • 일반 -> 인증 수준 : 없음
  • 보안 -> 모든 사용자에게 허용하도록 세 가지 사용 권한 모두 사용자 지정
  • ID -> 이 사용자 -> Excel 사용자 / 비밀번호 사용
  • Excel 앱을 실행하여 문제가 없는지 확인합니다.

3.DCOM 구성에서 Microsoft Excel 응용 프로그램의 보안 설정을 변경합니다.

제어판 --> 관리 도구 --> 구성 요소 서비스 --> 컴퓨터 --> myComputer --> DCOM 구성 --> Microsoft Excel 응용 프로그램.

마우스 오른쪽 버튼을 클릭하여 속성 대화상자를 가져옵니다.보안 탭으로 이동하여 사용 권한 사용자 지정

여기 게시물 참조: Excel 개체 생성 중 오류 발생, COM을 사용한 WCF에서 Excel 조작

새 응용 프로그램 풀을 생성해도 DCOMCNFG를 통해 해결할 수 없는 경우가 있습니다.다음과 같은 다른 방법이 있습니다.

애플리케이션 풀의 ID(모델 이름)를 LocalSystem으로 설정합니다.

근본적인 원인은 모르지만, 한 번은 해결해 줍니다.

응답하기에는 너무 늦었습니다.하지만, 이것이 여전히 문제에 직면하고 있는 누군가에게 도움이 된다면요.이 문제는 다음과 같이 해결되었습니다.

공유 풀 대신 전용 풀에 사이트를 설정합니다.

32비트 응용 프로그램 지원을 사용합니다.

애플리케이션 풀의 ID를 LocalSystem으로 설정합니다.

  1. IIS 사용자 또는 그룹 사용자에게 읽기/쓰기 권한 부여

  2. 시작 -> 실행 -> inetmgr

    ASP를 활성화합니다.기본 웹 사이트에 대한 NET 인증

64비트(x64)의 경우 C:\Windows\Sys 폴더를 만듭니다.WOW64\config\systemprofile\데스크탑

32비트(x86)의 경우 다음 폴더를 만듭니다. C:\Windows\시스템32\config\systemprofile\데스크탑

Windows 서비스가 시스템 프로파일에서 실행되는 경우 데스크톱 폴더가 필요합니다.이 폴더는 XP 및 이전 버전의 Windows Server에서 자동으로 생성되었지만 Vista 및 Windows 2008 Server에서는 생성되지 않았습니다.

개인적으로, 저는 다음과 같은 정확한 단계를 실행했습니다.

Interop Assembly 설치: Microsoft의 웹 사이트 https://www.microsoft.com/en-us/download/details.aspx?id=3508&tduid=(09cd06700e5e2553aa540650ec905f71)(256380)(2459594)(TnL5HPStwNw-yuTjfb1FeDiXvvZxhh.R.Q)() 에서 설치할 수 있습니다.

어셈블리 버전 확인: 개발 및 생산 시스템의 어셈블리 버전을 확인합니다.어셈블리는 GAC에 있으며, 7 과부에서 이 폴더는 %windir%\assembly입니다.

데스크톱 폴더 만들기: 서비스는 시스템 프로필 아래의 데스크톱 폴더를 사용하므로 이 폴더가 없는 경우 이 폴더를 만들어야 합니다. 폴더의 위치는 다음과 같습니다.Sys64 파일: C:\Windows\SysWOW64\config\systemprofile\f2 파일: C:\Windows\ 파일: 32\config\systemprofile\description

DCOM 사용자 권한 추가:
하고 '를 입력합니다. -------------------------------------------------------------------------------------------------------------------------
서비스 –> 내–> 구성. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Excel 프로그램을 .---Microsoft Excel 파일입니다.마우스 오른쪽 단추를 클릭하고 속성을 선택한 다음 보안 탭을 선택합니다.
---' Permissions ' Permission하고 둘 다 버튼을 과 같이
---------C추가 버튼과 사용자의 명령을 취소합니다.IIS_IUSRS' 및 'NETWORK SERVICE'에 모든 권한을 부여합니다.
---ID 탭으로 이동한 후 "대화형 사용자" 항목을 선택합니다.
---적용 및 확인을 누릅니다.

Application Pool이 시작되는 사용자를 변경하는 것이 효과적인 솔루션이었습니다(Application Pool Identity에는 COM 개체에 액세스할 수 있는 권한이 없음이 분명함).

행운을 빕니다.

다음을 수행합니다.

  1. Office 인터op 어셈블리가 설치되어 있는지 확인합니다.
  2. 개발 및 생산 시 어셈블리의 버전을 확인합니다.
  3. 시스템 프로필 아래에 데스크톱 폴더를 만듭니다.
  4. 서비스 사용자에 대해 DCOM 보안을 명시적으로 설정합니다.

자세한 내용은 여기에서 확인할 수 있습니다.

방금 간단한 애플리케이션을 만들었습니다.

응용 프로그램의 대상 프로세서는 무엇입니까?그런 것 같습니다.x86그래서 둘 중 하나로 설정합니다.x64또는anycpu.

당신이 겪고 있는 문제는 32bit dll에 접근하려는 64bit 프로세스 때문인 것 같습니다.

또한 대상 프로세서를 변경할 수 없는 경우 IIS의 응용 프로그램 풀 설정에서 32비트 응용 프로그램을 사용하도록 설정할 수 있습니다.

서버에 엑셀이 설치되어 있습니까?사용 중인 인터op 인터페이스는 Excel을 자동화하는 사용되므로 Excel 응용 프로그램이 설치되어 있어야 합니다.각 페이지 요청 주기는 잠재적으로 excel.exe의 별도 인스턴스를 시작합니다.웹 애플리케이션의 일부로 이 작업을 수행하지 않는 것이 좋습니다.

당신은 왜 이것을 하고 싶습니까?Excel 문서를 생성하려면 이 스레드의 다른 부분에서 언급한 OpenXML을 포함하여 훨씬 더 나은 방법이 있습니다.서버에서 Excel을 실행하지 마십시오!

OpenXML SDK 다운로드 링크: http://www.microsoft.com/en-us/download/details.aspx?id=5124

이것은 권한 문제처럼 보입니다.processMonitor를 실행하여 필요한 권한을 결정하는 것이 좋습니다.

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

스택 오버플로 질문 참조

이틀 전에 이 문제를 발견하고 이틀을 꼬박 보냈습니다. 그래서 DCOMCNFG --> My Computer Properties --> Com Security --> Launch and Activation Permissions --> 기본값을 편집하고 IUSR에 대한 모든 권한을 부여해야 한다는 것을 알게 되었습니다.

누군가에게 도움이 되기를 바랍니다.

사용

관리 그룹에서 사용자 생성

아래와 같은 웹 구성에서 이 사용자 세부 정보를 추가

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

IIS를 다시 시작하고 다시 확인합니다.

-어쨌든-

64비트에서 이를 구성하려면 다음에서 DCOMconfig 구성을 수행해야 합니다(위의 다른 답변 참조).

C:\WINDOWS\SysWOW64>mmc comexp.msc /32

DCOMCNFG를 사용한 프로세스 전체 보안 설정에 따라.

이 작업을 수행한 후에 이 작업을 다음 작업을 수행할 수 있습니다.IIS_IUSRS관리자 권한이 없습니다.

언급URL : https://stackoverflow.com/questions/17785063/retrieving-the-com-class-factory-for-component-error-80070005-access-is-de

반응형