Назад | Перейти на главную страницу

Приложение не открывается в среде Win7, IIS 7.5, ASP.NET4 при вызове через код C #

Я думаю, что у меня проблема с безопасностью, но я не могу ее решить. Я запускаю IIS 7.5 с пулом приложений MyAppPool. Затем я вызываю программу из кода C #, PDFCreator.exe, которая читает из C: \ DWF, а затем записывает C: \ DWF \ DWF.PDF.

Я предоставил IIS AppPool \ MyAppPool полные права на PDFCreator.exe, а также на каталог C: \ DWF. Когда C # создает процесс и вызывает PDFCreator.exe, он просто запускает процесс, показывающий MyAppPool в качестве владельца, но никогда не открывает приложение.

Может ли кто-нибудь вмешаться в дела, связанные с безопасностью, которые мне не хватает?

ProcessStartInfo processStartInfo = new ProcessStartInfo(@"c:\program files (x86)\pdfcreator\pdfcreator.exe");
processStartInfo.Arguments = @"/PF""c:\dwf\dwf.dwf"" /NoStart";
processStartInfo.RedirectStandardInput = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
processStartInfo.UseShellExecute = false;
Process process = Process.Start(processStartInfo);
// Read the output stream first and then wait
string output = process.StandardOutput.ReadToEnd();
string errors = process.StandardError.ReadToEnd();
Response.Write(output + errors);

Это неоптимальный дизайн для приложения IIS.

Настольные приложения работают в интерактивном режиме.

Приложения IIS работают как служба - без отображения пользовательского интерфейса для пользователя.

По сути, вы используете IIS для запуска некоторых задач фоновой обработки (потому что вам не виден графический интерфейс), которые считают, что они являются задачами обработки переднего плана.

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

«Это приложение затем распечатывает файл PDF с помощью драйвера принтера PDFCreator и сохраняет его на рабочем столе».

В случае пользователя IIS AppPool, где рабочий стол?

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

Но это все, что будет происходить где-то в фоновом режиме в поле IIS, и если приложение решит вывести диалоговое окно с ошибкой, все, оно сломается, пока окно не перезапустится. Как я уже сказал, неоптимально.