Eu estou usando o chapéu do meu desenvolvedor no momento, mas essa é mais uma pergunta de administrador de sistemas em que estou tentando trabalhar com um cliente nosso para resolver um problema. (Alguns nomes e números foram alterados - a ideia / problema continua o mesmo)
O cliente possui 10 servidores Citrix. Existem talvez 50 funcionários. Cada membro da equipe pode estar executando entre 3 e 8 cópias de um aplicativo que chamaremos de "B". É um aplicativo publicado. As instâncias do aplicativo B podem estar em execução no mesmo servidor / sessão ou podem se espalhar por vários servidores (e, portanto, várias sessões).
Eu tenho um aplicativo que chamaremos de "D". Ele está vinculado ao aplicativo B. Especificamente, você pode acionar algo em D que raspará a tela de B para o registro atual e exibirá os dados correspondentes em D. Portanto, o usuário está em B e deseja exibir informações adicionais sobre o registro atual de B na tela de D.
D é um aplicativo de instância única - ele está ciente de todos os bancos de dados B distintos e os une. Assim, o usuário deve estar executando apenas um único D por vez.
A maioria de nossos clientes não possui vários servidores ou várias instâncias de B. Portanto, nosso aplicativo D apenas registra uma tecla de atalho global para permitir que o usuário chame a função na cópia única de D para raspar a cópia única da tela de B.
Nesse cliente, essa abordagem não funcionará - não queremos que a área de trabalho do usuário, que é um conglomerado de muitas janelas B publicadas e talvez um navegador da Web, cliente de email etc., também seja confusa com uma janela D para cada Servidor Citrix.
Tive a ideia de escrever um pequeno aplicativo de stub para D que, quando executado, raspou a tela B ativa, interagiu com o usuário e saiu. Esse stub D, que chamarei de X, poderia estar em todos os servidores Citrix e não seria um desperdício de recursos. No entanto, eu ainda preciso ter uma maneira de iniciá-lo.
Tentei fazer um atalho na área de trabalho no perfil do usuário nos servidores Citrix, mas isso não parece funcionar. Minha idéia aqui foi colocar um atalho para X na área de trabalho e definir a tecla de atalho (termo muito difícil para o Google / Bing!) Para algo como Ctrl+ Alt+ D. Infelizmente, isso não parece funcionar. Pode ser que esse comportamento se baseie no explorer.exe e, como há um aplicativo sendo publicado, não existe o explorer.exe.
Mesmo se funcionou, preciso garantir que ele esteja ativado apenas na sessão Citrix "atual", que é a instância com B. do usuário focada. Não quero todos os servidores Citrix aos quais o usuário está conectado acionar nosso pequeno aplicativo X stub quando o atalho do teclado for pressionado.
Dada essa situação (obrigado por ler até aqui!), Tenho duas perguntas
Alguém sabe se eu devo fazer funcionar teclas de atalho dentro de atalhos em uma sessão publicada do Citrix de aplicativo? Se sim, o que devo fazer? Além disso, se ajudar a usar o RDP em vez do Citrix, também estaria interessado em opiniões.
Se você sabe como fazer o # 1 funcionar, como posso responder apenas ao servidor com a janela focada?
Se o item 1 não puder funcionar, eu poderia fazer com que nosso cliente modificasse a maneira como o B é lançado para ser lançado por meio de um arquivo em lotes. Em seguida, tenho um pequeno aplicativo de stub executado em segundo plano ao mesmo tempo em que B é iniciado. X pode registrar um mutex para evitar ser iniciado várias vezes na mesma sessão. Mas, nessa situação, eu ainda gostaria de ter uma opinião sobre como a Citrix (ou MS RDP) pode lidar com atalhos de teclado registrados globalmente. Se o usuário clicar em Ctrl+ Alt+ D, isso acaba indo para as várias cópias de X ou apenas para o X que pertence à sessão do aplicativo B?
Eu tentei cortar os bits desnecessários do plano de fundo acima. Indique se eu fui ambíguo e gostaria de esclarecimentos. Obrigado por todas e quaisquer opiniões oferecidas.