SERVI?O EXECUTA EXE
Pessoal, criei um serviço pelo C# e ele executa algumas funções para mim de forma automatizada e eu gostaria que ele fizesse a verificação se um exe meu estiver fechado ele mandasse abrir ele.
Consegui fazer a verificação porem ele não da start no programa, alias ele chama o meuprograma.exe lista ele no taskmgr como se estivesse em execução porem ele não abre a tela do software nem o icone que fica no system tray .
é possÃvel fazer isso um serviço executar um exe.
Se sim alguém pode da uma dica de como faz .
Estou chamando ele assim.
if (File.Exists(Environment.CurrentDirectory + @[Ô]\meuprograma.exe[Ô]))
{
var rstruix = new System.Diagnostics.ProcessStartInfo();
rstruix.FileName = [Ô]meuprograma.exe[Ô];
rstruix.UseShellExecute = true;
rstruix.Verb = ([Ô]runas[Ô]); //O segredo é esta linha!
rstruix.WorkingDirectory = Environment.CurrentDirectory;
System.Diagnostics.Process.Start(rstruix);
}
E tentei assim tambem :
System.Diagnostics.Process.Start(@[Ô]C:\caminhodomeuexezmeuprograma.exe[Ô]);
Consegui fazer a verificação porem ele não da start no programa, alias ele chama o meuprograma.exe lista ele no taskmgr como se estivesse em execução porem ele não abre a tela do software nem o icone que fica no system tray .
é possÃvel fazer isso um serviço executar um exe.
Se sim alguém pode da uma dica de como faz .
Estou chamando ele assim.
if (File.Exists(Environment.CurrentDirectory + @[Ô]\meuprograma.exe[Ô]))
{
var rstruix = new System.Diagnostics.ProcessStartInfo();
rstruix.FileName = [Ô]meuprograma.exe[Ô];
rstruix.UseShellExecute = true;
rstruix.Verb = ([Ô]runas[Ô]); //O segredo é esta linha!
rstruix.WorkingDirectory = Environment.CurrentDirectory;
System.Diagnostics.Process.Start(rstruix);
}
E tentei assim tambem :
System.Diagnostics.Process.Start(@[Ô]C:\caminhodomeuexezmeuprograma.exe[Ô]);
Não é problema de permissão? Esta com o UAC ativado? Tenta desativar o UAC reiniciar o pc e testar novamente.
Basicamente não dá para fazer isso. Serviços são feitos para rodar em segundo plano sem nenhuma interação com o usuário, tanto que eles rodam fora do contexto do usuário, e a partir do Windows Vista isso ficou mais restrito ainda já que eles foram isolados em uma sessão diferente da do usuário.
Entendi ele quer dar um bypass no UAC.. Isso não vai rolar, não do jeito que você fez é bem mais complexo que isso.. Mas tem sim como.
UAC não tem nada a ver com isso, ele só limita as permissões do usuário, o problema ai é como se você quisesse rodar um programa em um usuário estando logado em outro.
O que acontece é assim, quando você loga com o seu usuário do Windows é criado uma sessão, no XP esta sessão era a 0 e os serviços também rodavam nesta mesma sessão. A partir do Vista o usuário logado roda na sessão 1, enquanto que os serviços continuam rodando na sessão 0.
E o grande problema com isso é que você só pode executar programas na mesma sessão em que você está, e é por isso que ele até consegue executar o programa do serviço, ele aparece no gerenciador de tarefas mas não aparece nada pro usuário, pois o programa executou na sessão do serviço e não na do usuário, e até onde eu saiba não tem o que fazer quanto a isso.
Isso seria mais ou menos o mesmo que você logar dois usuários ao mesmo tempo, por exemplo pelo terminal services em um Windows Server, e de um destes usuários querer executar um programa sendo que a janela teria que aparecer para o outro usuário, o que não é possÃvel fazer.
O que acontece é assim, quando você loga com o seu usuário do Windows é criado uma sessão, no XP esta sessão era a 0 e os serviços também rodavam nesta mesma sessão. A partir do Vista o usuário logado roda na sessão 1, enquanto que os serviços continuam rodando na sessão 0.
E o grande problema com isso é que você só pode executar programas na mesma sessão em que você está, e é por isso que ele até consegue executar o programa do serviço, ele aparece no gerenciador de tarefas mas não aparece nada pro usuário, pois o programa executou na sessão do serviço e não na do usuário, e até onde eu saiba não tem o que fazer quanto a isso.
Isso seria mais ou menos o mesmo que você logar dois usuários ao mesmo tempo, por exemplo pelo terminal services em um Windows Server, e de um destes usuários querer executar um programa sendo que a janela teria que aparecer para o outro usuário, o que não é possÃvel fazer.
E agora entendi porque o serviço não consegue pegar o enviroment username . Pois ele está rodando na sessão diferente.
Mas se eu informar o usuário e senha que eu uso na máquina la no serviço será que ele deixaria executar? ou realmente não tem como fazer isso.
Mas se eu informar o usuário e senha que eu uso na máquina la no serviço será que ele deixaria executar? ou realmente não tem como fazer isso.
Acho que não rola cara.
Pro seu caso, acho que o ideal seria ter um projeto Windows Form rodando em background mesmo...
Pro seu caso, acho que o ideal seria ter um projeto Windows Form rodando em background mesmo...
Citação::
E agora entendi porque o serviço não consegue pegar o enviroment username . Pois ele está rodando na sessão diferente.
Mas se eu informar o usuário e senha que eu uso na máquina la no serviço será que ele deixaria executar? ou realmente não tem como fazer isso.
Eu acredito que não, mas nunca testei, só que como ele ainda vai rodar em uma sessão diferente da do usuário não deve fazer diferença.
Oloco JABA funcionou cara com o Loader que tem nesse projeto ai que vc postou valeu !!!!
Citação:Oloco JABA funcionou cara com o Loader que tem nesse projeto ai que vc postou valeu !!!!
Quando for lançar o vÃrus, me avisa pra que eu possa atualizar o meu antivirus.
Tópico encerrado , respostas não são mais permitidas