Process.Start(...) внезапно завершается с ошибкой при вызове ASP.NET MVC 5, работающем в IIS в Windows 10 и Windows Server 2019

У меня возникла внезапная проблема, которую я, кажется, не могу понять. В моем приложении ASP.NET MVC 5 (.NET Framework 4.8), работающем в IIS в Windows 10 (dev) и Windows Server 2019 (prod), у меня был следующий код для создания PDF-файлов из HTML, обработанных на сервере и сохраненных как файл с помощью Google Chrome.

Process.Start("cmd.exe", "/C \"\"C:/Program Files/Google/Chrome/Application/chrome.exe\" --headless --disable-gpu --run-all-compositor-stages-before-draw --no-margins --no-pdf-header-footer --print-to-pdf=E:\\Chrome-Print-to-PDF\\e24cfc08-f91f-46ec-82be-85f49f1178f6.pdf E:\\Chrome-Print-to-PDF\\e24cfc08-f91f-46ec-82be-85f49f1178f6.html\"");

Это работает уже 2, а может и 3 года. Это сработало вчера. На сегодняшний день он необъяснимым образом выходит из строя без каких-либо ошибок. Он просто не генерирует PDF-файл. Папка Chrome-Print-to-PDF на обеих машинах имеет Everyone с полными разрешениями, поэтому я не думаю, что это проблема с разрешениями.

Запуск этого кода в LINQPad 5 создаст PDF-файл, как и ожидалось.

Запуск такой команды в командной строке также работает:

CMD.EXE /C ""C:/Program Files/Google/Chrome/Application/chrome.exe" --headless --disable-gpu --run-all-compositor-stages-before-draw --no-margins --no-pdf-header-footer --print-to-pdf=E:\Chrome-Print-to-PDF\e24cfc08-f91f-46ec-82be-85f49f1178f6.pdf E:\Chrome-Print-to-PDF\e24cfc08-f91f-46ec-82be-85f49f1178f6.html"

Или вот так, также в командной строке работает:

CMD.EXE "C:/Program Files/Google/Chrome/Application/chrome.exe" --headless --disable-gpu --run-all-compositor-stages-before-draw --no-margins --no-pdf-header-footer --print-to-pdf=E:\Chrome-Print-to-PDF\e24cfc08-f91f-46ec-82be-85f49f1178f6.pdf E:\Chrome-Print-to-PDF\e24cfc08-f91f-46ec-82be-85f49f1178f6.html

Я совершенно не понимаю, что делать, чтобы решить эту проблему в моем приложении ASP.NET MVC 5, работающем в IIS. Я отчаянно ищу любую помощь, потому что это заблокировало мое приложение для создания каких-либо PDF-файлов, и меня преследуют многие пользователи.

🤔 А знаете ли вы, что...
C# является статически типизированным языком, что обеспечивает высокую безопасность и производительность кода.


52
1

Ответ:

Решено

Комментарии и ссылки от @KJ помогли мне найти решение. И чтобы ответить @KJ, да, он обновился до 128. Команда изменилась на:

Process.Start("cmd.exe", "/C \"\"C:/Program Files/Google/Chrome/Application/chrome.exe\" --headless=old --run-all-compositor-stages-before-draw --no-pdf-header-footer --print-to-pdf=E:\\Chrome-Print-to-PDF\\e24cfc08-f91f-46ec-82be-85f49f1178f6.pdf E:\\Chrome-Print-to-PDF\\e24cfc08-f91f-46ec-82be-85f49f1178f6.html\"");

Теперь это работает. Проблема в том --headless=old. В конце концов старая версия будет удалена, но я не могу заставить работать и новую версию, так что, похоже, в свое время мы вернемся к SO для решения этой проблемы. Надеемся, что ошибки, связанные с этим адресом, позволят нам использовать новую версию так же, как и старую.

@ItAllMakesSense, я видел этот ответ и реализовал его, чтобы увидеть результат, но это не особо помогло.

@Charlieface, ты меня понял, думаю, в то время я просто назвал это хорошим и пошел дальше, сколько бы времени мне ни потребовалось, чтобы заставить его работать. При этом вы правы, и я обновил команду, чтобы использовать Chrome напрямую, а не через CMD:

Process.Start("C:/Program Files/Google/Chrome/Application/chrome.exe", "--headless=old --run-all-compositor-stages-before-draw --no-pdf-header-footer --print-to-pdf=E:\\Chrome-Print-to-PDF\\e24cfc08-f91f-46ec-82be-85f49f1178f6.pdf E:\\Chrome-Print-to-PDF\\e24cfc08-f91f-46ec-82be-85f49f1178f6.html");

Спасибо всем за помощь! До новых встреч, когда --headless=old перестанет работать!