Сбой ExportAsFixedFormat с Excel - PullRequest
1 голос
/ 10 декабря 2010

Я пытаюсь конвертировать файлы Excel в PDF с помощью автоматизации COM.Код запускается как сервис с использованием системного пользователя.К сожалению, я получаю ошибку «0x800A03EC» в функции ExportAsFixedFormat ().Это работает, когда я запускаю это в интерактивном сеансе.

Я слышал, что для systemprofile нужна папка Desktop, поэтому я добавил их.пользователь системы не имеет принтера по умолчанию, поэтому я добавил значения к следующим клавишам:

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

Но это только приводит к зависанию Excel, а не к немедленному выбрасыванию исключения.идей и благодарен за любую помощь.

Ответы [ 3 ]

5 голосов
/ 14 августа 2012

Вы должны выбрать принтер по умолчанию для этого пользователя. Попробуйте импортировать следующий код в свой реестр. Примечание. Замените эти принтеры на свои (виртуальные) принтеры.

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:"

Конечно, вам все равно нужно создать папку рабочего стола в

C:\Windows\SysWOW64\config\systemprofile

или

C:\Windows\System32\config\systemprofile

в зависимости от ваших настроек.

После этих шагов вы сможете экспортировать Word, Powerpoint и Excel в PDF с помощью обычной неинтерактивной службы (например, пользователь Windows NT / SYSTEM). Вам не нужны никакие изменения в ваших компонентных сервисах

1 голос
/ 13 октября 2016

Я боролся с этим сильно, и этот пост был так близко. Перепробовав ряд других вещей, я знал, что этот пост был близок, и думал, что попробую кое-что.

Для справки: исправление папки «Рабочий стол» в systemprofile исправило эту проблему, когда мы работали с Windows Server 2008 R2 и Excel 2013 Automation. Это стало проблемой только после того, как мы обновились до Windows Server 2012 R2 и Excel 2016. Чтобы исключить виновника Excel, я попробовал на сервере с Windows Server 2012 R2 и Excel 2013 и столкнулся с очень похожими проблемами.

Вся автоматизация отлично работала в Network Service, но в идеале мы хотели запустить наш сайт в ApplicationPoolIdentity.

Перво-наперво, пулу приложений, запущенному с ApplicationPoolIdentity, необходимо загрузить профиль пользователя.

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

Так что теперь я должен был выяснить, кто эта личность. Может быть, есть лучший способ сделать это, но поскольку я добавил пользователя в IIS_IUSRS, я нашел эту информацию.

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

Теперь вы должны видеть себя участником IIS_IUSRS IIS APPPOOL \ (SID), где SID - это идентификатор безопасности вашего приложения в Windows. Это будет очень длинная буквенно-цифровая пунктирная строка, например "S-1-5 - ## - ######### - ######### - ######## ## - ######### - ######### "

В отличие от ответов выше, это был пользователь, которого мне нужно было отредактировать в реестре.

Так что теперь, следуя приведенным выше ответам, мне нужно было добавить следующее в реестр. Примечание: Добавление ключей к S-1-5-18 не решило проблему, мне пришлось добавить их в SID ApplicationPoolIdentity, найденного выше.

[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:"

Обратите внимание, как я использовал «правильный» ответ от eletre / Robert. Использование параметра OneNote для устройства не работает для меня.

Надеюсь, это избавит кого-то от необходимости выслеживать это когда-нибудь.

1 голос
/ 19 июня 2015

Неправильно:

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

Правильно:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...