web-dev-qa-db-fra.com

"Récupération de la fabrique de classes COM pour le composant .... erreur: 80070005 L'accès est refusé." (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED))

Je viens de créer une application simple et hébergé dans IIS6.0 . En code, je ne fais qu'instancier des objets 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();
        }
    }
}

Sa me donnant l'erreur suivante

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

Configuration du système:

Windows Server 2008, édition entreprise avec 64 bits. service pack 2

J'ai essayé avec de nombreuses solutions possibles trouvées sur Internet, mais aucune d'entre elles n'a fonctionné pour moi.

Certaines solutions que j'ai essayées sont ci-dessous

1) création d'une application de bureau sous le chemin "C:\Windows\SysWOW64\config\systemprofile" 2) définition de l'autorisation/du contrôle total pour Microsfot.EXcelApplicaiton dans DCOMCNFG 3) Suppression de toutes les instances Excel dans le gestionnaire de tâches

S'il vous plaît, aidez-moi à cet égard, ceci est juste un exemple d'application, mais dans mon application d'origine, il s'agit principalement de lire et d'écrire des données depuis/vers Excel.

23
Ram
  1. Assurez-vous que le runtime Office est installé sur le serveur. 
  2. Si vous utilisez Windows Server 2008, l'utilisation de Office Interops est une configuration longue et la procédure est la suivante.

Mieux vaut passer à Open XML ou vous pouvez configurer comme ci-dessous

  • Installer MS Office Pro Latest (j'ai utilisé 2010 Pro)
  • Créer un utilisateur ExcelUser. Attribuer WordUser avec un groupe d'administrateurs
  • Aller à l'ordinateur -> Gérer
  • Ajouter un utilisateur avec les options ci-dessous
  • Options utilisateur mot de passe n'expire jamais
  • Le mot de passe ne peut pas être changé

Com + Configuration

  • Allez au Panneau de configuration -> Administrateur -> Services de composants -> Configuration DCOM
  • Ouvrez Microsoft Word 97 - 2003 Propriétés
  • Général -> Niveau d'authentification: Aucun
  • Sécurité -> Personnaliser les 3 autorisations pour autoriser tout le monde
  • Identité -> Cet utilisateur -> Utiliser ExcelUser/mot de passe
  • Lancez l'application Excel pour vous assurer que tout va bien

3. Modifiez les paramètres de sécurité de l'application Microsoft Excel dans DCOM Config.

Panneau de configuration -> Outils d'administration -> Services de composants -> Ordinateurs -> MonOrdinateur -> Configuration DCOM -> Application Microsoft Excel.

Faites un clic droit pour obtenir la boîte de dialogue des propriétés. Accédez à l'onglet Sécurité et personnalisez les autorisations.

Voir les articles ici: Erreur lors de la création d'un objet Excel , Manipulations Excel dans WCF avec COM

33
bot

Parfois, vous créez un nouveau pool d'applications et ne pouvez pas le résoudre via DCOMCNFG. Ensuite, il y a une autre méthode à faire:

Définissez le Identity (nom de modèle) du pool d'applications sur LocalSystem.

Je ne connais pas la cause première, mais cela résout mon problème une fois.

30
Luis Sérgio

Trop tard pour répondre. Mais, si cela aide quelqu'un qui est toujours confronté au problème. J'ai fait réparer ça par:

→ Définissez le site sur un pool dédié au lieu d'un partagé.

→ Activer le support d'application 32 bits.

→ Définissez l'identité du pool d'applications sur LocalSystem.

5
Hardik V.
  1. donner l'autorisation de lecture/écriture à l'utilisateur IIS ou au groupe d'utilisateurs

  2. Démarrer -> exécuter -> inetmgr

    activer l'authentification ASP.NET pour votre site Web par défaut

3 . Pour 64 bits (x64), créez ce dossier: C:\Windows\SysWOW64\config\systemprofile\Desktop

Pour 32 bits (x86), créez ce dossier: C:\Windows\System32\config\systemprofile\Desktop

Le service Windows, s'il est exécuté sous le profil système, a besoin du dossier Bureau. Ce dossier a été créé automatiquement sur XP et les versions antérieures de Windows Server, mais pas sur Vista et Windows 2008 Server.

3
dotnetandsqldevelop

la solution qui a fonctionné pour moi consiste à changer d'utilisateur sous lequel le pool d'applications est démarré (ApplicationPoolIdentity n'a évidemment pas assez de droits pour accéder à l'objet COM).

Bonne chance!

3
Milos

essayez de faire ce qui suit:

  1. Assurez-vous que les assemblages Office Interop sont installés.
  2. Vérifiez la version des assemblages sur le développement et la production.
  3. Créer un dossier de bureau sous systemprofile.
  4. définir la sécurité DCOM explicitement pour l'utilisateur du service.

vous pouvez trouver plus de détails ici

3
user3140982

Avez-vous Excel installé sur le serveur? Les interfaces d'interopérabilité que vous utilisez sont utilisées pour automatiser Excel, ce qui nécessite que l'application Excel y soit installée. Chaque cycle de demande de page lancera potentiellement une instance distincte d'Excel.exe. Je déconseille fortement de faire cela dans le cadre d'une application Web.

Pourquoi veux-tu faire cela? Si vous souhaitez générer des documents Excel, il existe bien de meilleures façons de le faire, y compris OpenXML, comme mentionné ailleurs dans ce fil de discussion. Veuillez ne pas utiliser Excel sur le serveur!

Lien vers le téléchargement du SDK OpenXML: http://www.Microsoft.com/en-us/download/details.aspx?id=5124

2
Richard Cook

Je viens de créer une application simple

Quel est le processeur cible de l'application? Je devine qu'il s'agit de x86 - donc définissez-le sur x64 ou anycpu.

Je pense que le problème que vous rencontrez est dû à un processus 64 bits essayant d'accéder à une DLL 32 bits.

En outre, si vous ne pouvez pas modifier le processeur cible, vous pouvez essayer d'activer les applications 32 bits à partir des paramètres de pools d'applications dans IIS.

1
Fraser

Personnellement, j'ai exécuté ces étapes exactes:

* Installez les assemblages Interop: vous pouvez installer depuis le site Web de Microsoft https://www.Microsoft.com/en-us/download/details.aspx?id=3508&tduid= (09cd06700e5e2553aa540650ec905f71) (256380) (2459594) TnL5HPStwNw-yuTjfb1FeDiXvvZxhh.RQ) ()

* Vérifier la version des assemblages: vérifie la version des assemblages sur les machines de développement et de production. Les assemblys seront dans le GAC, dans veuves 7, ce dossier est% windir%\Assembly. 

* Créer un dossier du bureau: le service utilise le dossier du bureau sous systemprofile. Vous devrez donc créer ce dossier. Sinon, voici l’emplacement du dossier: Pour les applications 64 bits: C:\Windows\SysWOW64\config\systemprofile\Desktop Pour les applications 32 bits: C:\Windows\System32\config\systemprofile\Desktop 

* Ajouter les autorisations utilisateur DCOM:
--- lancez la fenêtre d’exécution et tapez 'dcomcnfg'.
--- Développez Services de composants -> Ordinateurs -> Poste de travail -> Configuration DCOM.
--- Recherchez l’application Microsoft Excel. Faites un clic droit dessus et sélectionnez les propriétés, puis sélectionnez l'onglet Sécurité.
--- Sélectionnez le bouton radio Personnaliser sous 'Autorisations de lancement et d'activation' et 'Autorisation d'accès', puis cliquez sur le bouton Modifier pour que les deux ajoutent des utilisateurs comme suit.
--------- Cliquez sur le bouton Ajouter et donnez aux utilisateurs 'IIS_IUSRS' et 'NETWORK SERVICE' et donnez leur tous les privilèges.
--- Allez dans l'onglet Identité et sélectionnez l'option "L'utilisateur interactif".
--- Cliquez sur Appliquer, puis sur OK.

1
IsaacBok

utilisez NPOI pour lire et écrire Excel .. c'est une source libre et ouverte 

par exemple

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

voir cette question Stackoverflow

1
sangram parmar

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

En utilisant ce lien, nous pouvons résoudre le problème 'Accès refusé' pour Excel, objets Word . C'est un lien vraiment utile

1
Madhu

Cela ressemble à un problème de permission. Je suggère d'exécuter processMonitor pour déterminer les autorisations nécessaires.

1
Mike

Je suis tombé sur cette question il y a deux jours, j'ai passé deux jours complets. J'ai donc constaté que je devais donner l'accès au groupe d'utilisateurs IUSR à l'adresse DCOMCNFG -> Propriétés de mon ordinateur -> Sécurité com - - Lancement et activation Autorisations -> Modifier les valeurs par défaut et donner tous les droits à IUSR.

j'espère que ça va aider quelqu'un ....

0
harshal H

Utilisez ceci 

créer un utilisateur dans le groupe admin

ajouter les détails de cet utilisateur dans la configuration Web comme ci-dessous

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

redémarrez IIS et vérifiez à nouveau

-tony-

0
tony