O aplicativo não será aberto no Win7, IIS 7.5, ambiente ASP.NET4 quando chamado via código C #

2

Eu acho que tenho uma questão de segurança aqui, mas não consigo contornar isso. Estou executando o IIS 7.5 com um pool de aplicativos chamado "MyAppPool". Eu estou chamando um programa do código C #, PDFCreator.exe, que lê de C: \ DWF e, em seguida, grava C: \ DWF \ DWF.PDF.

Eu dei direitos completos do IIS AppPool \ MyAppPool para PDFCreator.exe, bem como o diretório C: \ DWF. Quando o C # cria o processo e chama o PDFCreator.exe, ele simplesmente inicia um processo mostrando MyAppPool como proprietário, mas nunca abre o aplicativo.

Alguém pode entrar em contato com algo relacionado à segurança que possa estar faltando?

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);
    
por SteveCalPoly 26.01.2012 / 19:02

1 resposta

1

Esse é um design abaixo do ideal para um aplicativo do IIS.

Aplicativos de área de trabalho são executados de forma interativa.

Os aplicativos do IIS são executados como um serviço - sem exibir uma interface do usuário para o usuário.

Você está essencialmente usando o IIS para iniciar algumas tarefas de processamento em segundo plano (porque não há nenhuma GUI visível para você) que ache que elas são tarefas de processamento de primeiro plano.

O "tipo de astúcia" que você mencionou em seus comentários é exatamente por que você pode ter problemas ao fazer isso. Apenas para escolher uma frase:

"Este aplicativo então imprime em um arquivo PDF usando o driver de impressora do PDFCreator e o salva na área de trabalho."

No caso de um usuário do AppPool do IIS, onde está a área de trabalho?

Você pode tentar usar uma conta de usuário específica (não uma conta virtual do App Pool do AppPool \ ThisIsAVirtualAccount ) que lhe atribui um perfil específico e definir Carregar perfil de usuário como True (propriedades do pool de aplicativos) para garantir que as pastas de perfil (e o driver de impressora ) estejam disponíveis para esse usuário.

Mas isso é tudo o que vai acontecer em algum lugar no fundo em uma caixa do IIS, e se o aplicativo decidir abrir um diálogo de erro, é isso, ele está quebrado até que a caixa seja reiniciada. Como eu disse, abaixo do ideal.

    
por 27.01.2012 / 01:40