Estou usando o VS2005 C e teste no meu PC local do XP Pro com IIS local, escrevi um serviço da Web para chamar um arquivo. exe de software de terceiros para usar o arquivo CSV para inserir dados em seu banco de dados OLEDB, que usam System. Diagnostics. Process. Start. Os mesmos códigos funcionaram quando uso VS2005 build-in ASP Development Server (localhost: 2999MyServicesMyServices. asmx). Mas quando eu uso o URL normal do IIS (developerMyServicesMyServices. asmx) para executar Process. Start no serviço da Web, ele apenas assombrou e não faz nada. Então eu coloquei a matança para matar o processo após 1 minuto, no entanto, o processo parou, mas não fez nada. Os códigos são como seguindo, eu dei permissão completa do IIS, incluo a gravação e execução do XmlDocument xmlConfig nova XmlDocument () string toolPath xmlConfig TDCService Atributo. GetAttribute (ShopKeepPath) Processo do processo myProcess. Start (toolPath, IMPORT-ACCOUNT FILENAME - C: CustomerCSVfile. csv) se (myProcess. HasExited) myProcess. Kill () Monday, January 01, 2007 3:00 PM Quando você está executando o ASP através do Visual Studio, o código é executado com suas credenciais. Se você executá-lo no IIS, ele será executado com a conta aspnet. Esta conta tem acesso ao banco de dados OLEDB Esta conta tem acesso ao arquivo CSV A ferramenta pode estar dando-lhe um erro em StandardError ou StandardOut. Tente ler e depurar esses valores: terça-feira, 02 de janeiro de 2007 3:04 PM Todas as respostas Há duas coisas que você deve considerar: qual versão do IIS você está usando A estrutura permitida é executada no seu servidor web (você precisa verificar o As extensões da web do IIS aqui. Se eles estiverem desativados, habilite-os. Não esqueça que cada versão no servidor web deve estar habilitada - ou pelo menos a versão em que seu aplicativo está escrito deve ser ativada) Terça, 02 de janeiro de 2007 7:08 AM Quando você estiver Executando o ASP através do Visual Studio, o código é executado com suas credenciais. Se você executá-lo no IIS, ele será executado com a conta aspnet. Esta conta tem acesso ao banco de dados OLEDB Esta conta tem acesso ao arquivo CSV A ferramenta pode estar dando-lhe um erro em StandardError ou StandardOut. Tente ler e depurar esses valores: terça-feira, 02 de janeiro de 2007 3:04 PM Muito obrigado. Eu achei que o problema é devido à Conta Aspnet não tem permissão para acessar o banco de dados oledb. Depois de configurar o compartilhamento para a pasta de banco de dados oledb, o problema foi resolvido. Eu só estou querendo saber se a guia de segurança nas propriedades da pasta só aparece quando o PC está em um domínio Porque o meu PC não está no domínio, então não tenha a aba de segurança e guia de permissão em Compartilhar, estou à direita quinta-feira, 04 de janeiro , 2007 2:24 AM Estou preso em uma situação semelhante, mas minha situação parece um pouco diferente: estou usando o processo mais interno como usuário de domínio (veja o código cortado abaixo). O processo Perl. exe aparece no servidor executado como o usuário correto, mas o processo simplesmente aloca uma fração da memória normalmente associada a esse processo e depois trava até que finalmente seja morto, nunca grava em um arquivo de log nem eu Obtenha sugestões úteis através de StandardOut nem standardError. psi. FileName ConfigurationManager. AppSettings quotPerlBinExequot psi. EnvironmentVariables quotPathquot quotc: programa filesimagemagick-6.2.9-q16quot psi. UserName ConfigurationManager. AppSettings quotUserNamequot psi. Domain ConfigurationManager. AppSettings quotUserDomainquot psi. WorkingDirectory ConfigurationManager. AppSettings quotWorkingDirectoryquot seqüência foo ConfigurationManager. AppSettings quotUserPassquot psi. Senha nova System. Security. SecureString () para (int i0 iltfoo. Length i) resultado novo SingleImageResult (true, quotCommand Line: quot psi. FileName quot quot psi. Arguments quotnnquot quotStandard Output: quot p. StandardOutput. ReadToEnd () quotnquot quotStandard Error: quot p. StandardError. ReadToEnd () quotnnot quotNote: Processo teve que ser KILLED. quot) result new SingleImageResult (true, quotCommand Line: quot psi. FileName quot quot psi. Arguments quotnququot quotStandard Output: quot p. StandardOutput. ReadToEnd () quotnquot quotStandard Error: quot P. StandardError. ReadToEnd ()) Eu tinha algum código que parecia seu, onde eu estava tentando executar um processo como um usuário diferente e também adicionei uma nova variável de ambiente. Notei que, quando adicionei uma nova variável de ambiente à coleção EnvironmentVariables, a propriedade LoadUserProfile parecia ser ignorada. O processo exe funcionaria como o usuário pretendido no taskmanager, mas carregaria o perfil do usuário atual e não o outro usuário como eu pretendia. Quando não adicionei a variável de ambiente, o perfil do usuário correto foi carregado como esperado. Não sei se isso é um erro ou comportamento esperado. Acabei por não usar a variável env e acabei de passar a informação como um parâmetro na propriedade Argumentos. Segunda-feira, 18 de fevereiro de 2008 11:49 PM Estou enfrentando um problema semelhante 1. Estou tendo uma aplicação do Windows que obtém o nome de usuário e a senha do usuário e também possui um botão. 2. Depois de inserir o nome de usuário e a senha, o usuário deve clicar nesse botão. 3. No usuário, clique no que o aplicativo deve fazer é que ele tenha que abrir a página desejada, digamos, por exemplo (gmail) e deve entrar na página usando o nome de usuário e a senha. 4. Para isso usei o código seguinte no evento de clique do botão. 5. O problema é o nome de usuário e a senha é dada pelo usuário, mas qual deve ser o conteúdo no campo de domínio. 6. Está dando Win32Exception indicando quotParameter is Incorrectquot Monday, March 24, 2008 11:21 AM O domínio nesta instância é o domínio em que o servidor está sendo executado. IE companyname provavelmente. O usuário que o processo está executando em deve ser parte desse domínio e deve ter direitos para executar o aplicativo nesse servidor. Ainda tenho uma pergunta para outra pessoa. Eu posso fazer isso correr bastante direto. No entanto, quando tento realmente ler a informação que está sendo postada, estou tendo um problema que o identificador é inválido. Aqui está um snippett do meu código. Todas as ideias serão apreciadas. String astr quotscquot System. Diagnostics. ProcessStartInfo psi novo System. Diagnostics. ProcessStartInfo (astr) psi. Arguments (quotquot strServer quot query quotquot txtService. Text quotquotquot) System. Diagnostics. Procure proc new System. Diagnostics. Processo () proc System. Diagnostics. Process. Start (psi) - Aqui é onde ele trava o System. IO. StreamReader sr1 proc. StandardOutputProcess. WaitForExit Method (Int32) WaitForExit (Int32) faz o thread atual aguardar até o processo associado terminar. Ele deve ser chamado após todos os outros métodos serem chamados no processo. Para evitar o bloqueio da linha atual, use o evento Exitado. Esse método instrui o componente Processo a aguardar um período finito de tempo para o processo sair. Se o processo associado não sair pelo final do intervalo porque a solicitação de término é negada, falso é retornado ao procedimento de chamada. Você pode especificar um número negativo (Infinito) por milissegundos. E Processo. WaitForExit (Int32) irá comportar-se da mesma forma que a sobrecarga WaitForExit (). Se você passar 0 (zero) para o método, ele retorna verdadeiro somente se o processo já existiu de outra forma, ele retorna imediatamente falso. No Framework 3.5 e versões anteriores, se milissegundos fosse -1, a sobrecarga WaitForExit (Int32) esperava milissegundos MaxValue (aproximadamente 24 dias), não indefinidamente. Quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos, é possível que o processamento de saída não seja concluído quando esse método retornar. Para garantir que o tratamento de eventos assíncrono foi concluído, chame a sobrecarga WaitForExit () que não leva nenhum parâmetro depois de receber uma verdade dessa sobrecarga. Para ajudar a garantir que o evento Exited seja tratado corretamente nas aplicações Windows Forms, defina a propriedade SynchronizingObject. Quando um processo associado é encerrado (é encerrado pelo sistema operacional através de uma terminação normal ou anormal), o sistema armazena informações administrativas sobre o processo e retorna ao componente que chamou WaitForExit (Int32). O componente Processo pode acessar a informação, que inclui o ExitTime. Usando o Handle para o processo encerrado. Como o processo associado saiu, a propriedade Handle do componente já não aponta para um recurso de processo existente. Em vez disso, o identificador pode ser usado apenas para acessar a informação dos sistemas operacionais sobre o recurso do processo. O sistema está ciente das alças para os processos que não foram lançados pelos componentes do Processo, portanto, mantém as informações ExitTime e Handle na memória até que o componente Processo liberte especificamente os recursos. Por esse motivo, sempre que ligar a instância do Começo para um processo, chame Close quando o processo associado tiver terminado e você não precisa mais de informações administrativas sobre isso. Fechar liberta a memória alocada para o processo encerrado.
No comments:
Post a Comment