PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Utilisation d'Excel dans un service Windows
Utilisation d'Excel dans un service Windows
Débuté par Multipass, 31 aoû. 2020 09:57 - 13 réponses
Membre enregistré
127 messages
Posté le 31 août 2020 - 09:57
Bonjour à tous,

Je rencontre un problème sur lequel je bute et pour lequel je souhaite vraiment trouver une solution. J'ai lu pas mal de posts et même des vieux, certains avec pistes et même des mises en garde mais aucun, sauf erreur de ma part, avec une solution. Je "m'obstine" sur ce sujet car je pense qu'il est le plus adapté à ma situation.

La situation, la voici : j'ai un site WB qui doit notamment permettre de générer des classeurs Excel. Les fichiers sont assez spécifiques et doivent être produits à partir de classeurs modèles. Compte-tenu de cet élément et du fait que les demandes seront +/- nombreuses mais surtout regroupées dans le temps (fin de mois typiquement), j'ai fait le choix de déporter la production des documents sur le serveur, via un service Windows, qui génère les fichiers puis les envois aux destinataires.

Tout fonctionne en mode projet mais ça coince en test...

La config test est la suivante : Windows Server 2019 64 bits, pack Office 2019 64 bits, service Windows 64 bits (projet WD25).

L'erreur :
Appel WL :
Traitement de 'Constructeur de la classe CExcel' (CExcel.Constructeur), ligne 26

Que s'est-il passé ?
L'objet automation 'Excel.Application' n'est pas installé sur votre système.

Code Erreur : 2202
Niveau : Erreur fatale

Module : 'wd250vm64.dll (01F250089f - 25.0.480.3)
Identifiant des informations détaillées (.err) : 2202
Informations de débogage :
Instruction AutomCreate
...


A noter que tout fonctionne si je lance manuellement l'exe WD ou lorsque je redémarre le service qui alors traite les demandes en attente. L'erreur intervient lorsque le service est déclenché hors session utilisateur.

A noter également que :
- le service utilise le compte Administrateur (je pense avoir tout essayé de ce côté là),
- la configuration DCOM du composant Microsoft Excel Application, onglet Identité, utilise également l'utilisateur Administrateur mais sans pouvoir activer la case à cocher "Le compte système (service uniquement)".

Les 2 derniers points ont leur importance car auparavant l'erreur intervenait tout le temps, même lors des lancements manuels en session.

Merci d'avance pour vos pistes, observations, réflexions...

Bon dèv à tous,
Alain
Membre enregistré
124 messages
Posté le 31 août 2020 - 15:55
Hello

Je me rappel ça.
Il faut créer un répertoire quelque part dans le répertoire de Windows.
Je regarde mes notes demain et j'y reviens.

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membre enregistré
124 messages
Posté le 31 août 2020 - 17:57
Voilà...
Create directory
"C:\Windows\SysWOW64\config\systemprofile\Desktop" (for 64 bit Windows)
or
"C:\Windows\System32\config\systemprofile\Desktop" (for 32 bit Windows)

That should do the trick...

--
Peter Holemans
www.mcs2.eu
www.pixontri.eu
Membre enregistré
127 messages
Posté le 01 septembre 2020 - 06:47
Bonjour Peter,

Merci beaucoup d'avoir pris du temps pour m'aider.

J'ai lu effectivement des posts dans lesquels il est question de ce répertoire (et d'un autre également). La solution doit être ailleurs car ce répertoire est présent sur mon Windows Server 2019. J'ai lu également qu'il était question de droits sur ces répertoires mais aussi concernant l'autorisation d'accès et/ou d'exécution dans les propriétés DCOM. Je vais continuer mes recherches dans ce sens...

Encore Merci et bon dèv à toi !
Alain
Membre enregistré
952 messages
Posté le 01 septembre 2020 - 09:04
bonjour Multipass,

j'ai trouvé ce post qui retrouve déjà plusieurs choses que vous avez effectué , il y en a peu être que vous n'avez pas encore faites :

http://timwappat.info/post/2013/09/03/Solution-to-Excel-Automation-VBNETC-error-running-as-a-service-0x800A03EC-MicrosoftOfficeInteropExcelWorkbooksOpen

bon courage en tout cas
Membre enregistré
952 messages
Posté le 01 septembre 2020 - 09:52
mais bon vu les messages indiquant comme quoi Microsoft ne recommande pas / n'autorise pas Excel dans un service çà risque d'être compliqué...

bon dèv !
Membre enregistré
127 messages
Posté le 01 septembre 2020 - 23:37
Bonjour Christophe,

Merci pour le lien.
Ça reprend effectivement un peu tout ce que j'ai pu lire jusqu'à présent : les mises en garde, le répertoire, les composants...

Bon dèv à toi aussi !
Alain
Posté le 02 septembre 2020 - 16:52
au lieu de passer tout ce temps à essayer de faire fonctionner cette solution, une alternative simple est de faire la même chose dans un programme windev, PAS un service... Tu fais en sorte que le programme en question soit lancé en auto au démarrage du serveur, et il passe son temp à gérer la file d'attente des travaux excel à faire...

Cette solution fonctionne sans problème et est très simple à mettre en oeuvre.
Membre enregistré
127 messages
Posté le 02 septembre 2020 - 23:06
Bonjour Argus,

Oui tu as raison, bien sûr, mais je voulais aller au bout de l'exercice et j'ai finalement trouvé une solution. Reste maintenant à tout reprendre histoire de bien comprendre la situation et à ne pas fragiliser la sécurité du serveur inutilement.

A+
Membre enregistré
8 messages
Posté le 30 septembre 2025 - 18:37
Multipass a écrit :
Bonjour Argus,

Oui tu as raison, bien sûr, mais je voulais aller au bout de l'exercice et j'ai finalement trouvé une solution. Reste maintenant à tout reprendre histoire de bien comprendre la situation et à ne pas fragiliser la sécurité du serveur inutilement.

A+


Bonjour,

Avec un peu de chance pouriez-vous partager la solution que vous avez trouvé?

J'ai le même genre de cas, un service qui doit générer un Excel sur Windows Server. Je ne peux pas passer par une appli WIndev (le serveur redémarre tous les dimanches, pas envisageable de se loguer chaque semaine pour relancer le GUI...)

Merci

Yoann
Membre enregistré
4 284 messages
Posté le 30 septembre 2025 - 20:29
Bonjour,
Une fois de plus, on voit que les services sont utilisés à tort et à travers.
Rappel : Un service doit être utilisé pour permettre à une application de répondre à tout moment à une sollicitation externe (lecture sur une socket par exemple).
Si le service doit se contenter d'exécuter une tâche de façon répétée, il est préférable de faire une application standard et de lancer cette application dans une tâche planifiée, dans ton cas, avant l'arrivée des employés.
Une autre solution, qui a en plus le mérite de ne pas utiliser inutilement des ressources (le serveur a autre chose à faire,) est de lancer ton appi au démarrage soit .
-En plaçant un raccourcis dans le répertoire "Démarrer"
-En cochant la case qui va bien dans les propriété de l'appli
-En appelant la fonction suivante dans l'initialisation du projet :
FONCTION LancerAuto(saNomProg est chaîne) : booléen
saRegistryKey est chaîne

saRegistryKey = "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
SI RegistreExiste(saRegistryKey) ALORS
SI RegistreEcrit(sRegistryKey,saNomProg,ChaîneConstruit("%1,%2%3.EXE,%1",Caract(34),ComplèteRep(fRepExe()),"saNomProg))
RENVOYER Vrai
SINON
RENVOYER Faux
FIN
FIN


--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 30 septembre 2025 - 20:30
Membre enregistré
8 messages
Posté le 02 octobre 2025 - 14:42
Bonjour,

Merci pour votre réponse.
Le but était d'enrichir un service déjà en place, et qui réalise de nombreuses choses en continu.
Je ne peux pas placer cette génération Excel dans une tâche planifiée car personne ne se connecte au serveur en temps normal (le serveur n'est là que pour traiter des informations et héberger un site web).

Si personne ne se connecte -> aucun bureau ouvert -> pas de GUI -> exécution d'appli Windev impossible.

L'autre possibilité est de générer les excels sur demande via une des pages web. Par ce biais j'arrive à instancier un objet OLE, mais la moindre ouverture de fichier excel (workbooks.Open) échoue. Le contexte des sessions webdev est sûrement similaire à celui d'un service Windows.
Membre enregistré
4 284 messages
Posté le 03 octobre 2025 - 09:02
Lors de la génération de ta feuille , as-tu tenté l'utilisation des xlsDocuments ?
La génération sur demande est en effet une bonnes idée, elle évite une consommation inutile de ressources.

--
Il y a peut être plus simple, mais, ça tourne
Quand tout a échoué, utilise l'option RTFM
Message modifié, 03 octobre 2025 - 09:34
Membre enregistré
127 messages
Posté le 07 octobre 2025 - 06:17
Bonjour Yoann,

Il a été nécessaire de remettre le nez dans mes notes de l'époque alors désolé pour la réponse un peu tardive.

Pour resituer un peu le contexte, le service en place depuis 5 ans surveille un fichier de collecte de tickets et, en synthèse, déclenche la production et l'expédition de documents. Au final, on parle d'états PDF, de classeurs Excel, de notifications diverses...

Pour commencer, autant être exhaustif, je te propose de lister les sources :

https://www.developpez.net/forums/d1710545/environnements-developpement/windev/l-objet-automation-word-application-n-installe-systeme/

https://stackoverflow.com/questions/22323636/automating-ms-word-in-server-2012-r2

https://social.technet.microsoft.com/Forums/windows/fr-FR/dde69147-a01a-4eb1-8ea9-31adbf874bed/microsoft-excel-application-entry-missing-in-dcomcnfg…

https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/160120-ole-dynamique-pilotage-excel-depuis-service-windows/read.awp

https://support.microsoft.com/fr-fr/help/257757/considerations-for-server-side-automation-of-office

Au final, voici ce que j'ai mis en place :

1. Configuration DCOM du composant Microsoft Excel Application

Onglet Identité :
-> Cocher "Cet utilisateur" et renseigner un compte admin local.

Onglet Sécurité :
-> Autorisations de configuration : cocher "Personnaliser" et vérifier (via le bouton "Modifier") que l'admin utilisé est en "Contrôle total".

2. Droits spécifiques sur rep C:\Windows\SysWOW64\config\systemprofile\Desktop pour "Service Réseau" et "Utilisateurs" à savoir : "Contrôle total".
J'avoue que ce point n'a pas été creusé plus de ça et pourrait sûrement être affiné un peu...

3. Dans le projet WD, utilisation de la classe CExcel.

J'espère que tu trouveras là de quoi avancer sur ton chemin.
Tiens nous informés...

Bon dév à tous !
Alain