Problèmes avec la bureautique dans asp.net. Je peux utiliser des alternatives telles que le bureau ouvert, si je savais comment

J’ai une application Web ASP.NET 2.0 qui devrait télécharger un fichier ppt, puis extraire ses diapositives en images. Pour cela, j’ai importé les assemblys office.dll et Microsoft.Office.Interop.PowerPoint.dll et écrit le code suivant

public static int ExtractImages(ssortingng ppt, ssortingng targetPath, int width, int height) { var pptApplication = new ApplicationClass(); var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); var slides = new List(); for (var i = 1; i <= pptPresentation.Slides.Count; i++) { var target = string.Format(targetPath, i); pptPresentation.Slides[i].Export(target, "jpg", width, height); slides.Add(new FileInfo(target).Name); } pptPresentation.Close(); return slides.Count; } 

Si je lance ce code sur ma machine locale, dans asp.net ou dans un exécutable, il fonctionne parfaitement. Mais si j’essaie de l’exécuter sur le serveur de production, j’obtiens le message d’erreur suivant:

System.Runtime.InteropServices.COMException (0x80004005): PowerPoint n’a pas pu ouvrir le fichier. En savoir plus sur Microsoft.Office.Interop.PowerPoint.Presentations. Int32 alturaThumb, Boolean geraXml) dans Upload.ProcessRequest (contexte HttpContext)

Le processus s’exécute avec l’utilisateur NT AUTHORITY \ NETWORK SERVICE. IIS est configuré pour utiliser l’authentification anonyme. L’utilisateur anonyme est un administrateur, je l’ai configuré comme suit pour permettre à l’application de s’exécuter sans avoir à s’inquiéter des permissions.

Dans ma machine de développement, j’ai Office 2010 beta1. J’ai testé avec l’exécutable dans un PC avec Office 2007 aussi bien. Et si j’exécute le code à partir de l’exécutable du serveur, avec Office 2003 installé, il fonctionne parfaitement.

Pour éviter les problèmes d’permissions, tous les utilisateurs du serveur ont un access complet au site Web. Le site Web est exécuté en mode IIS7 et classique.

J’ai aussi entendu dire que Open-office a une API qui devrait pouvoir le faire, mais je n’ai rien trouvé à ce sujet. Cela ne me dérange pas d’utiliser DLLImport pour faire ce que je dois faire et je peux installer open-office sur le serveur Web. Ne vous inquiétez pas pour la réécriture de cette méthode, tant que les parameters sont identiques, tout fonctionnera.

J’apprécie ton aide.

N’utilisez jamais Office Interop à partir d’une application ASP.NET. Voir Considérations relatives à l’automatisation côté serveur d’Office .

Toutefois, si vous ne disposez d’aucune alternative, sous Windows Server 2008, vous devez créer les répertoires suivants pour que cela fonctionne:

Windows 2008 Server x64: C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop Windows 2008 Server x86: C: \ Windows \ System32 \ config \ systemprofile \ Desktop

Lorsque vous envisagez d’utiliser Office Automation sur le serveur, vous pouvez consulter les informations contenues dans l’article suivant de la Base de connaissances.

http://support.microsoft.com/kb/257757

Une phrase clé du lien ci-dessus

À l’heure actuelle, Microsoft ne recommande pas et ne prend pas en charge l’automatisation des applications Microsoft Office à partir d’une application ou d’un composant client non interactif (y compris les services ASP, ASP.NET, DCOM et NT), car Office peut présenter un comportement instable et / ou blocage lorsque Office est exécuté dans cet environnement.

Et je peux confirmer que ce qui précède est très vrai, et pas seulement MS essayant de vous décourager …

Dans ma situation (convertir une présentation en vidéo et j’ai un problème très similaire avec les éléments ouverts), cela aide:

Création des répertoires suivants:

C: \ Windows \ SysWOW64 \ config \ systemprofile \ Desktop

C: \ Windows \ System32 \ config \ systemprofile \ Desktop (je n’ai pas cela)

Mon système d’exploitation Windows Server 2012 R2 Standard

Les bibliothèques Interop exigent que l’application en question soit installée sur la machine à partir de laquelle elles s’exécutent. Par exemple, pour que cela fonctionne sur votre serveur de production, vous devez avoir installé Office sur ce serveur. C’est généralement une idée affreuse. Il existe de nombreux problèmes avec le type d’installation car chaque fois qu’une personne effectue une demande, une nouvelle instance de l’application en question (dans votre cas, PowerPoint) est lancée.

Si vous souhaitez parsingr des fichiers PowerPoint sur un serveur central, vous devez utiliser une bibliothèque qui lit les fichiers PowerPoint. Je sais qu’Aspose fabrique un tel produit (Aspose.Slides), mais il en existe d’autres également.

Si les documents sont dans PowerPoint 2007, vous pourrez peut-être parsingr le code XML Open Office pour les données souhaitées. Voir Présentation des formats de fichier Open XML Office (2007) et Open XML SDK 2.0 pour Microsoft Office pour plus d’informations.

Je peux me tromper, j’ai commencé à chercher une chose similaire récemment. Mais vous ne devriez pas avoir besoin que Office soit installé sur une machine pour créer ou éditer des fichiers 2007+. Ce sont essentiellement des fichiers zip avec une extension différente. Si vous le renommez en .zip, vous devriez voir tous les fichiers et pouvoir les éditer directement.

Il peut ensuite être décompressé et tous les fichiers sont là pour vous. Vous pouvez créer de nouveaux fichiers de la même manière

N’utilisez jamais Office Interop à partir d’une application ASP.NET. Voir Considérations relatives à l’automatisation côté serveur d’Office .

Cependant, je voulais simplement noter ici que je devais effectuer le correctif décrit par Murthy Pantham sur un ordinateur Windows 7 Professionnel 64 bits avec Office 2010. Windows 7 Service Pack 1 ou Office 2010 Service Pack 3 n’était pas installé. Donc, la leçon à tirer est apparemment que la correction ne se limite pas à Server 2008. J’espère que cela aidera quelqu’un.