Acessando o disco em Task Scheduler

1

Estou executando alguns aplicativos de console usando o agendador de tarefas. Esses são aplicativos que executam pequenas tarefas de backoffice e são executados como aplicativos de console C #.

As próprias aplicações são executadas perfeitamente (ou seja, uma delas gera e-mails no final de sua execução e estou recebendo esses e-mails), mas estou tendo problemas para fazer com que eles façam log corretamente. Eles usam o Log4Net e a configuração aparece bem porque, se eu os executar manualmente, eles produzem os logs corretamente.

No entanto, quando eu os executo sob a mesma conta de usuário (confirmada pela verificação do gerenciador de processos) no agendador de tarefas, eles não produzem nenhum log. É como se eles estivessem sendo privados dos privilégios corretos (mas não lançando exceções porque executam muito bem) ou o agendador de tarefas de alguma forma está encaixando as gravações do disco e nunca permitindo que eles toquem no disco real.

Eu originalmente tentei escrever para% AppData%, mas li que o agendador de tarefas tem problemas com as variáveis do usuário. Então, eu já codifiquei os caminhos para c: \ BackOffice \ Logs, mas isso não alterou o comportamento infeliz. D:

Alguma ideia? Este é o Microsoft Server 2008 R2 Datacenter em execução no AWS EC2.

Aqui está a configuração do log4net, se isso ajudar:

<?xml version="1.0" encoding="utf-8"?>

<log4net>
  <appender name="ConsoleAppender"
              type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  </appender>
  <appender name="FileAppender"
              type="log4net.Appender.FileAppender">
    <file value="c:\BackOffice\Logs\LogName_log.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="ConsoleAppender" />
  </root>

</log4net>
    
por Quibblesome 05.04.2013 / 21:32

2 respostas

1

Finalmente, encontrei meu problema. O diretório de trabalho atual não era o diretório do aplicativo, portanto, o log4net nunca conseguiu encontrar o arquivo de configuração. Felizmente, há um campo opcional no Agendador de Tarefas que permite definir o diretório inicial para sua tarefa.

    
por 13.03.2014 / 17:50
1

Isso soa como o problema do UAC com o qual acabei de lidar - encontrei sua pergunta enquanto procurava a resposta!

No meu caso, tive que executar a solicitação programada com a caixa de seleção "Executar com privilégios mais altos" marcada. Isso funcionou com a conta de administrador porque, com o UAC, o token de administrador com privilégios mais altos pode ler / gravar os arquivos de outro usuário (nesse caso, outro administrador). Eu testei e descobri que, se a tarefa estava agendada para ser executada sob o mesmo usuário do usuário que possuía o arquivo / diretório, isso funcionava mesmo sem o token de 'maior privilégio'.

Ainda não determinei se tudo isso se aplica a contas e acesso que não são de administrador, mas presumo que, como não há token de "maior privilégio" para uma conta não administrativa, ele falharia.

Mais pesquisas, e parece que o diretório% alluserprofile% é onde você deveria colocar os dados "deste computador", ao contrário dos dados "por usuário" no diretório% appdata%. Então, talvez colocá-lo lá resolverá seu problema.

    
por 23.08.2013 / 17:21