Estou tentando solucionar um problema em um servidor Windows 2008 em que a tentativa de se conectar a um driver ODBC "Fonte de Dados Timberline" falha se a chamada estiver em um contexto de "serviço", mas será bem-sucedida se a chamada for iniciada manualmente uma sessão de área de trabalho remota.
Eu configurei o serviço para ser executado como meu usuário.
Gostaria de saber se, sendo o restante igual (usuário, máquina, etc), existem diferenças fundamentais de segurança / ambiente entre a execução de um processo como um serviço vs manualmente?
--- Detalhes da implementação ---
Caso seja útil para qualquer pessoa, eu tive um sistema que começou como uma tentativa de conexão a um banco de dados Timberline usando ODBC e um script CGI chamado Python via IIS 7. O script em si funciona bem, no entanto, assim que eu tentativa de executar a função de conexão ODBC, o script falha sem gerar uma exceção. O script foi capaz de se conectar bem quando executado via linha de comando.
A mesma coisa aconteceu ao usar um serviço C # / .net, tentando executar via Apache, Windows Scheduler ou até mesmo uma ferramenta de agendamento de terceiros.
Com a última opção (a ferramenta de agendamento de terceiros, pycron) O serviço está configurado para fazer login como meu usuário de domínio e teve o mesmo problema (confirmei através do Gerenciador de Tarefas que o processo executando o usuário foi, na verdade, eu).
Além disso, se for importante, o DSN do Timberline é configurado para localizar o banco de dados via UNC ("\\ timberline-server \ Timberline Office \ Contas \ AT" ou algo parecido)
O DSN está configurado no nível "DSN do Sistema" que, de acordo com a Ferramenta de Administração ODBC, significa que o DSN está disponível para usuários e serviços
Eu também percebi que, como Joel apontou, o servidor tem uma unidade mapeada ("Y:" que é mapeada para "\\ timberline-server \ Timberline Office")