|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
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 |
| |
| |
| | | |
|
| | |
| |
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 RTFMMessage 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 RTFMMessage 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 |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|