COMPILACAO .NET IMPORTANTE

LUIS.HERRERA 12/04/2013 11:27:11
#421843
Amigos bom dia.
Acho que todos sabem do NGEN.exe que compila (exe = MSIL) em (exe = binário) para a plataforma correta de execução. Porém o arquivo não pode ser distribuido, uma vez que não rodaria em outros micros com plataforma diferente, só para uso próprio.

Porém estava pesquisando e em alguns fóruns, inclusive a documentação do MSDN, diz claramente que é possível compilar totalmente um programa MSIL no momento da instalação, ou seja, ao insatalar seu programa que ainda é MSIL a instalação faria a compilação final para um arquivo binário, antes de executar o programa.

A questão é:

1- em nenhum desses foruns ou em sites que pesquisei pelo Google consegui descrobrir como fazer isso, só que é possível. Alguém saberia como?

2- essa compilação na instalação, só funciona com o Click Once ou pode ser implementada com outros instaladores como INNO SETUP?

3- após a compilação do binário (durante a instalação) o que ocorre com o MSIL? é Excluído ou permanece também no micro? Seria possível excluí-lo ao final, se isso não for automático?
OCELOT 12/04/2013 11:51:58
#421848
Resposta escolhida
Se o objetivo disso é tentar proteger o MSIL não tem como.

Acho que o que a microsoft diz se refere ao caso de que você pode fazer o programa de instalação chamar o NGen depois de já ter copiado os arquivos, sei que da pra fazer isso com o Inno Setup mas não sei dizer como pois nunca fiz muita coisa com ele.

O executável não é modificado então não muda em nada a segurança, o NGen gera a imagem nativa do programa em outro local, mas ele ainda requer o executável original para funcionar, não tem como excluir o MSIL em momento algum.
GUIMORAES 12/04/2013 13:38:43
#421855
Como o OCELOT disse:
Citação:

O executável não é modificado então não muda em nada a segurança, o NGen gera a imagem nativa do programa em outro local, mas ele ainda requer o executável original para funcionar, não tem como excluir o MSIL em momento algum.



Você ainda deve utilizar o executável que está em MSIL, mas ao executar a aplicação, ao invés de recompilar o aplicativo, ele utiliza uma imagem nativa do cache, usando o compilador Just-In-Time (JIT) para compilar o assembly original.
Isto irá em teoria, melhorar o desempenho da aplicação (Não percebi muitas melhorias) ao executa-las.

Para utilizar ela com o INNO SETUP eu faço assim:

Citação:

[Run]
Filename: {win}\Microsoft.NET\Framework\v2.0.50727
gen.exe; Parameters: [Ô]install [Ô][Ô]{app}    este.exe[Ô][Ô][Ô]; WorkingDir: {app}; StatusMsg: Optimising Performance; Flags: runhidden



Qualquer duvida posta ai.
Forte abraço!
LUIS.HERRERA 12/04/2013 15:50:37
#421866
GUIMORAES como você faz para distribuir o programa .Net no inno, pois não há mais registro de DLL e só copiar e colar os arquivos numa pasta específica certo?

Tem como fazer +/- o que o Click Once diz que faz, ou seja, checar se existe o framework correto, SQL server instalado e demais recursos necessários ao funcionamento do sistema?

Um outro detalhe, ouvi dizer que é possível instalar um app Dot.Net no servidor Windows e usar em todas as estações de trabalho, sem ter de intalar em cada uma. Com isso não seria preciso atualizar cada máquina a cada nova versão (correção) do programa, isso procede? Nesse caso a compilação do MSIL ocorre na estação e não no servidor correto?
OCELOT 12/04/2013 16:29:41
#421869
Se todos os componentes usados no programa forem do próprio .Net ou forem todos feitos com o .Net não precisa registrar nada, só copiar os arquivos todos para a mesma pasta que deve funcionar.

O que o Click Once faz não tem a ver com o seu programa em si, isso pode ser feito pelo instalador se ele der este recurso, de detectar e instalar o .Net Framework você encontra exemplos na internet de como fazer com o Inno Setup, vi um que até baixava o instalador do .Net caso não tivesse, já do SQL Server não vi e não recomendo colocar para instalar junto pois ele só é necessário no servidor e não nos clientes.

Isso de instalar no servidor é a mesma coisa quase que as pessoas faziam com o VB6 de instalar no servidor e criar links nos PCs clientes, só que ainda precisava instalar e registrar os componentes localmente, com o .Net é mesma coisa, precisa instalar o Framework localmente para poder rodar, apesar de estar na rede o programa roda localmente, apenas os arquivos são lidos pelo compartilhamento da rede, e pode ser que as políticas de segurança do .Net impeçam que o programa rode ou que ele execute certas funções por estar rodando de um local não confiável.

Eu particularmente não recomendo fazer isso pois é praticamente uma falha de segurança, e ainda é necessário fazer com que todos fechem o programa para poder substituir, o ideal acho que é fazer um sistema de atualização automática, onde você coloca os arquivos atualizados no servidor e os clientes detectam e instalam a versão nova quando são executados.
Tópico encerrado , respostas não são mais permitidas