Excel 2007 automatisation sur un serveur Windows 2008 x64

Je suis bien au courant de L'article Microsoft support base indiquant qu'il n'est pas pris en charge pour automatiser l'interface utilisateur des produits office moins. Il semble que Windows Server 2008 x64 et Excel 2007 appliquent l'instruction donnée.

J'exécute le code suivant dans un service NT (compte système Local) méthode OnStart. Tout ce qu'il fait est L'automatisation Excel de la façon dont il fonctionne lorsque vous exécutez le même code dans une Application Console.

Le code fourni comporte deux parties. La première partie lance Excel, crée un nouveau livre de travail et l'enregistre dans le nom de fichier donné. La deuxième partie lance une nouvelle instance D'Excel et ouvre le fichier donné. L'opération open se termine par cette exception:

Le Service ne peut pas être démarré. Système.Runtime.InteropServices.COMException (0x800A03EC): Microsoft Office Excel ne peut pas accéder au fichier 'c:temptest.xls'. Il y a plusieurs raisons possibles:

• le nom ou le chemin du fichier n'existe pas. • Le fichier est utilisé par un autre programme. • Le classeur que vous essayez d'enregistrer le même nom qu'un classeur actuellement ouvert.

Pourquoi l'excel automatisé était-il capable de lancer et d'écrire des fichiers sur le disque, mais échoue lorsqu'il est demandé "juste" d'ouvrir un fichier existant?

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
// launch excel and create/save a new work book
Microsoft.Office.Interop.Excel.ApplicationClass excel = new       Microsoft.Office.Interop.Excel.ApplicationClass();
excel.UserLibraryPath, excel.Interactive));
//            
string filename = "c:\temp\test.xls";
if(System.IO.File.Exists(filename)) System.IO.File.Delete(filename);
//
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Save(filename);
excel.Quit();
excel = null;
// lauch new instance of excel and open saved file
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
try
{
    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Open(filename,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                true,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value,
                false,
                false,
                System.Reflection.Missing.Value,
                false,
                System.Reflection.Missing.Value,
                System.Reflection.Missing.Value);
     book.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
      book = null;
  }
  finally
  {
      excel.Quit();
      excel = null;
  }
  //
  GC.Collect();
25
demandé sur Chris Richner 2009-05-14 19:04:18

5 réponses

La solution est vraiment simple. Le forum msdn fil peut être trouvé ici

pour faire court, je poste la solution ici, le crédit va à h Ogawa

Cette solution est ...

{[0]・ - Windows 2008 Server x64

Veuillez créer ce dossier.

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

{[0]・ - Windows 2008 Server x86

S'il Vous Plaît faire ceci dossier.

C:\Windows\System32\config\systemprofile\Desktop

...au lieu de dcomcnfg.EXE.

Cette opération a éliminé les problèmes de bureautique dans mon système.

Un dossier de bureau semble nécessaire dans le dossier systemprofile pour ouvrir le fichier par Excel.

Il disparaît de Windows2008, Windows2003 avait le dossier, et je pense que cela cause cette erreur.

31
répondu Chris Richner 2009-07-07 07:39:16

Comme indiqué dans la source, vous devez définir les droits corrects pour le dossier de bureau. Cela a fonctionné pour moi sur Windows 2008-64bits et Office 2010 32bits.

  1. Créer un répertoire "C:\Windows\SysWOW64\config\systemprofile\Desktop "(pour Windows 64 bits) ou "C:\Windows\System32\config\systemprofile\Desktop" (pour Windows 32 bits)

  2. Attribuez à l'utilisateur " services réseau (Service Réseau)" les droits suivants pour le dossier créé:

Lire & Exécuter, lister le contenu du dossier, Lire

Jean.

7
répondu Jonx 2010-12-06 03:13:24

J'ai assez souvent trouvé que l'appel Quit () n'est pas suffisant pour libérer les ressources. Essayez d'ajouter: -

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

Entre L'instruction Quit () et la valeur null.

2
répondu Stuart Whiteford 2009-05-14 16:46:05

Il y a beaucoup plus d'erreurs que celle mentionnée que vous devrez résoudre pour que Excel fonctionne sur Windows Server 2007 64 bits. Voir les étapes que j'ai travaillées Après avoir travaillé sur cela pendant deux jours complets!

1
répondu Borgon 2011-04-15 20:56:15

Si vous utilisez Apache, vous devrez peut-être également suivre ces étapes pour que MS Word fonctionne correctement (avec tout ce qui est décrit dans les autres réponses):

Ci-dessous est une capture d'écran montrant les deux boîtes de dialogue que vous devrez faire apparaître: entrez la description de l'image ici

Pour Apache:

Services->Apache->Clic Droit (Propriétés)->Onglet Connexion

MS Word:

Lancez dcomcnfg.exe - > racine de la Console- > Services de composants - > Ordinateurs - > Poste de travail - >DCOM Config- > trouver L'Application Microsoft - > droite Cliquez Sur (Propriétés) - > Onglet Identité

* * si vous ne trouvez pas MS Word, assurez-vous de lancer la Configuration DCOM correcte (64 bits vs 32 bits) en fonction de la version D'Office que vous avez installée.

Il y a deux options ici, vous pouvez définir Apache pour utiliser Compte système Local et cochez la case pour autoriser l'interaction de bureau. Si vous faites cela, vous devez définir Identity pour MS Word sur Interactive User .

Sinon, vous devez définir les deux au même utilisateur (idéalement l'utilisateur connecté) comme indiqué dans l'image.

1
répondu A.O. 2014-05-29 20:43:16