2010-12-10 2 views
0

Je tente de convertir des fichiers Excel en PDF via l'automatisation COM. Le code s'exécute en tant que service en utilisant l'utilisateur du système. Malheureusement, j'obtiens l'erreur "0x800A03EC" dans la fonction ExportAsFixedFormat(). Cela fonctionne quand je cours ceci dans une session interactive.ExportAsFixedFormat avec Excel échoue

J'ai entendu dire que systemprofile avait besoin d'un dossier Desktop, donc j'ai ajouté ceux-ci.

J'ai entendu cela aussi pourrait avoir à faire avec l'utilisateur du système de ne pas avoir une imprimante par défaut, donc j'ajouté des valeurs aux clés suivantes:

HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Devices 
HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts 

Mais cela ne fait Excel pendre au lieu de lancer une exception immédiatement. Je suis à court d'idées et reconnaissant pour toute aide.

+0

vous vérifié dans les paramètres de service -> journal sur l'onglet « Autoriser le service à interagir avec le bureau »? –

+0

Oui, ceci est vérifié. –

Répondre

5

Vous devez sélectionner une imprimante par défaut pour cet utilisateur. Essayez d'importer le code suivant dans votre registre. Remarque: remplacez ces imprimantes pour vos propres imprimantes (virtuelles).

Windows Registry Editor Version 5.00 

[HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Devices] 
"Send To OneNote 2010"="winspool,nul:" 
"Microsoft XPS Document Writer"="winspool,Ne00:" 

[HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts] 
"Send To OneNote 2010"="winspool,nul:,15,45" 
"Microsoft XPS Document Writer"="winspool,Ne00:,15,45" 

[HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Windows] 
"UserSelectedDefault"=dword:00000000 
"Device"="Send To OneNote 2010,winspool,nul:" 

Bien sûr, vous avez encore créer votre dossier de bureau dans

C:\Windows\SysWOW64\config\systemprofile 

ou

C:\Windows\System32\config\systemprofile 

en fonction de votre configuration. Après ces étapes, vous devriez être en mesure d'exporter Word, Powerpoint et Excel en PDF en utilisant un service régulier non interactif (par exemple un utilisateur Windows NT/SYSTEM). Vous ne avez pas besoin de modifications dans votre Services de composants

+0

Je l'ai trouvé en attendant, mais depuis que vous avez répondu, voici le bonus. –

0

Mauvais:

[HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Windows] "UserSelectedDefault"=dword:00000000 "Device"="Send To OneNote 2010,winspool,nul:"

Correct:

[HKEY_USERS\S-1-5-18\Software\Microsoft\Windows NT\CurrentVersion\Windows] "UserSelectedDefault"=dword:00000000 "Device"="Microsoft XPS Document Writer,winspool,Ne00:"

0

Je mal à comprendre ce poste avec force et c'était si proche. Après avoir essayé un certain nombre d'autres choses, je savais que ce post était proche et je pensais essayer quelque chose. Pour l'anecdote, le correctif du dossier "Desktop" dans systemprofile a résolu ce problème lors de l'exécution de Windows Server 2008 R2 et Excel 2013 Automation. Cela a seulement commencé à être un problème pour après avoir mis à niveau vers Windows Server 2012 R2 et Excel 2016. Pour éliminer Excel comme le coupable, j'ai essayé sur un serveur avec Windows Server 2012 R2 et Excel 2013 et connu des problèmes très similaires.

Toute l'automatisation fonctionnait parfaitement sous Network Service, mais idéalement, nous voulions exécuter notre site sous ApplicationPoolIdentity. En premier lieu, le pool d'applications exécuté avec ApplicationPoolIdentity doit d'abord charger le profil utilisateur.

Start Run -> inetmgr 
expand Server -> Application Pools 
right click on your App Pool -> Advanced Settings 
under Process Model -> Load User Profile <-- should be set to true 

Alors maintenant, j'ai dû déterminer qui était cette identité. Peut-être existe-t-il une meilleure façon de procéder, mais depuis que j'ai ajouté l'utilisateur à IIS_IUSRS, c'est là que j'ai trouvé l'information.

Windows -> Edit local users and groups 
Groups -> right click IIS_IUSRS -> Add to Group... 
Add... 
Locations... (choose local server), click OK 
In the Enter the object names to select box type IIS APPPOOL\<app pool name> 
    (note the space and the triple P) 
    also, <app pool name> is the name of your Application Pool in inetmgr 

Maintenant, vous devriez voir en tant que membre de IIS_IUSRS IIS APPPOOL \ (SID) où SID est votre identifiant de sécurité ApplicationPoolIdentity dans les fenêtres. Ce sera une très longue chaîne alphanumérique en pointillés comme "S-1-5 - ## - ######### - ######### - ######## ## - ######### - ######### »

Contrairement aux réponses ci-dessus, cela a été l'utilisateur que je devais modifier dans le registre.

Donc maintenant en suivant les réponses ci-dessus j'ai dû ajouter ce qui suit au registre. Note: L'ajout des clés à S-1-5-18 n'a pas résolu le problème, j'ai dû les ajouter au SID de l'ApplicationPoolIdentity trouvé ci-dessus.

[HKU]\SID\Software\Microsoft\Windows NT\CurrentVersion\Devices 
    "Send To OneNote 2010"="winspool,nul:" 
    "Microsoft XPS Document Writer"="winspool,Ne00:" 
[HKU]\SID\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts 
    "Send To OneNote 2010"="winspool,nul:,15,45" 
    "Microsoft XPS Document Writer"="winspool,Ne00:,15,45" 
[HKU]\SID\Software\Microsoft\Windows NT\CurrentVersion\Windows 
    "UserSelectedDefault"=dword:00000000 
    "Device"="Microsoft XPS Document Writer,winspool,Ne00:" 

Remarquez comment je la réponse "correcte" de eletre/Robert. L'utilisation de l'option OneNote pour le périphérique n'a pas fonctionné pour moi.

Espérons que cela sauve quelqu'un la peine de chasser ce bas un jour.