"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 인스턴스 제거
이와 관련하여 저를 도와주세요, 이것은 단지 샘플 앱이지만, 제 원래 앱에서는 대부분 엑셀에서 데이터를 읽고 쓰는 것입니다.
- 서버에 Office 런타임이 설치되어 있는지 확인합니다.
- 윈도우즈 서버 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으로 설정합니다.
IIS 사용자 또는 그룹 사용자에게 읽기/쓰기 권한 부여
시작 -> 실행 -> 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 개체에 액세스할 수 있는 권한이 없음이 분명함).
행운을 빕니다.
다음을 수행합니다.
- Office 인터op 어셈블리가 설치되어 있는지 확인합니다.
- 개발 및 생산 시 어셈블리의 버전을 확인합니다.
- 시스템 프로필 아래에 데스크톱 폴더를 만듭니다.
- 서비스 사용자에 대해 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
'IT' 카테고리의 다른 글
AND 및 OR을 모두 사용하는 mongodb 쿼리 (0) | 2023.04.28 |
---|---|
C#의 목록에서 항목을 제거하는 방법은 무엇입니까? (0) | 2023.04.28 |
(NOLOCK)와 트랜잭션 격리 수준 설정 읽기가 커밋되지 않은 상태 (0) | 2023.04.28 |
"0"과 "1"을 거짓과 참으로 변환하는 방법 (0) | 2023.04.28 |
deque 컨테이너와 list STL 컨테이너의 차이점은 무엇입니까? (0) | 2023.04.28 |