Postagens

Mostrando postagens de 2009

GAC vs. <codeBase>

Onde trabalho, não faz muito tempo que fomos questionados sobre boas práticas e o bom uso de assemblies .NET no GAC (Global Assembly Cache). Sinceramente, o melhor uso do GAC é não utilizá-lo, pelo menos no contexto que as aplicações aqui são desenvolvidas. As aplicações, com excessão das que são utilitários e frameworks, geralmente são isoladas no que se diz respeito a reaproveitamento de código. Então, o uso do GAC não se justifica para essa maioria dos casos. Umas das coisas legais que aprendi enquanto dava uma olhada no assunto foi utilizar melhor as configurações de runtime, mais especificamente em relação ao codebase. Com esta configuração, é possível indicar o caminho de um assembly que deve ser utilizado pela aplicação, estando ela onde estiver na máquina ou inclusive na rede! Com isso, acabou a desculpa de colocar um componente no GAC apenas porque a aplicação, seja ela windows ou web, não consegue encontrá-lo. GAC é para compartilhar, como o próprio nome diz. E como f

Detection of product '{0}', feature 'Base_And_Client', component '{1}' failed

Imagem
Finalmente consegui resolver o problema que estava tendo com o Windows Installer e o COM+ de uma forma aceitável. O Problema O problema inicial foi quando criei um instalador, utilizando o InstallShield, para empacotar um aplicativo que utilizamos onde trabalho, que havia sido migrado de .NET 1.1 para .NET 2.0. Este aplicativo é composto de componentes .NET 1.1 (para manter a compatibilidade com versões de sistemas que usam esse runtime), .NET 2.0 com windows services e COM+ (também para manter compatibilidade). A compatibilidade foi necessária para fazer com que os sistemas que utilizassem a versão em .NET 1.1 desse aplicativo pudessem passar a utilizar a nova, sem a necessidade de alterações em código. E para manter a compatibilidade, foi criado o pacote COM+ citado acima, para ser o divisor de águas entre os runtimes 1.1 e 2.0, permitindo as chamadas. Quando este pacote foi instalado nos servidores de componentes, a cada chamada do aplicativo, eram logados os eventos abaixo, al

Windows Installer & Application Resiliency

Atualmente tenho lido sobre uma característica do Windows Installer, que é a "resiliência" (não encontrei ainda tradução para resiliency). Trata-se de uma característica onde o próprio serviço do Windows Installer consegue identificar se um produto instalado está saudável, ou seja, se todos seus componentes estão instalados e configurados, etc etc. O seguinte artigo é muito bom, pois explica um pouco mais sobre a forma que a resiliência funciona: (Application Resiliency: Unlock the Hidden Features of Windows Installer) http://msdn.microsoft.com/en-us/library/aa302344.aspx . []'s

Erro ao executar o SGEN

Imagem
Hoje encontrei um problema ao tentar compilar um projeto dentro do Source Control (no caso, Rational Clear Case). Este projeto em C# faz referência a um web service, e por isso no processo de compilação é chamado o SGEN para gerar dll *.XmlSerializers.dll. Pra ser sincero não sei porque esta dll deve existir, isso fica para um próximo post. A questão agora é como resolver o problema. O erro que ocorreu foi o abaixo. Deu access denied na hora de executar o SGEN em cima do meu projeto, sendo que este projeto faz referência a componentes (FxCopSdk.dll) que fazem parte do Source Control (ou seja, estão com o atributo read-only). ------ Rebuild All started: Project: bba.fwk.vbp.rules.code, Configuration: Release Any CPU ------c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:TRACE /reference:..\..\04_referencias\FxCop\FxCopSdk.dll /reference:..\..\04_referencias\FxCop\Microsoft.Cci.dll /reference:c:\WINDOWS\Microsoft.NET\Frame

Windows Installer CleanUp Utility - MSIZap

Imagem
Vira e mexe temos um problema onde não conseguimos desinstalar um MSI instalado, onde não temos mais o arquivo .msi. Quando tentamos remover, aparece uma mensagem informando que a referência ao arquivo não é encontrada. Para remediar, existe uma aplicação (Windows Installer CleanUp Utility) que faz a limpeza da instalação MSI no registry. Note que ela não desinstala o produto, só remove as referências. A desinstalação fica por sua parte... A aplicação lista todos os produtos instalados, e remove os que você selecionou usando o MSIZAP. Segue KB http://support.microsoft.com/kb/290301/en-us e onde baixar http://download.microsoft.com/download/e/9/d/e9d80355-7ab4-45b8-80e8-983a48d5e1bd/msicuu2.exe . []'s

Apertem os cintos, o Configuration Manager sumiu!

Imagem
Por algum motivo que foge a razão, o Configuration Manager havia sumido do meu Visual Studio 2008. Não conseguia encontrar a opção para compilar as minhas soluções em Debug ou Release. Coisa de louco. Reparei a instalação do Visual Studio, e nada... até que encontrei o seguinte post: http://blogs.msdn.com/saraford/archive/2008/03/05/did-you-know-how-to-pretend-the-configuration-manager-doesn-t-exist-besides-closing-your-eyes-and-saying-i-don-t-see-you-165.aspx Nele se explica que para que o Configuration Manager apareça, é necessário que uma opção esteja marcada nas configurações do Visual Studio. É a “Show advanced build configuration”, e fica em Tools --> Options --> Project and Solutions --> General. Após selecionar (e ainda quero descobrir com certeza o que aconteceu para ela ser removida), o Configuration Manager voltou. O Solution Configuration (aquela combo que mostra Debug e Release) voltou a aparece, agora posso configurar opções para compilações em Debug e Re

Add-in VSTO Excel não carregando em Terminal Service

Imagem
Há algum tempo trabalhei em um projeto que precisou de uma solução envolvendo add-in VSTO para Excel. Era uma aplicação onde o usuário informava alguns dados na planilha e executava determinada funcionalidade no add-in que enviava esses dados para processamento no servidor. Esta solução foi implantada há aproximadamente um ano, e funciona ok. Ela costuma ser instalada diretamente nas máquinas dos usuários. Recentemente nos deparamos com um problema. Essa solução, quando instalada em servidores de terminal service, não funciona. O add-in não aparece para os usuários. Nem mesmo ele aparece nos “Disabled Items”, que é o local onde são exibidos os add-ins que não conseguiram carregar no Excel. (Excel 2003 – no menu “Help”, clicar em “About Microsoft Office Excel” e depois em “Disabled Items”) Obs. Há algum tempo, coloquei no blog como verificar erros no carregamento de add-ins ( http://galorebr.blogspot.com/2008/03/nas-ltimas-semanas-estive-trabalhando.html ). Ao tentar adicionar o

COM+ e problemas de memória

Onde trabalho possuímos uma infra que serve de façade para a chamada de componentes dos sistemas de forma remota. Esta forma remota pode ser desde estações de usuário para servidores de componentes, servidores web para servidores de componentes e mesmo entre servidores de componentes. Ela é um pacote COM+, e chama componentes que estão também hospedados no COM+ (temos muito legado aqui, vai demorar para sair dessa tecnologia). Recentemente deparamos com um problema de alto consumo de memória do nosso processo dllhost. Pedimos um dump deste processo (windbg), e ao analisar, encontrei muitas entradas de System.OutOfMemoryException. Ao verificar a causa dessas exceptions, encontrei a seguinte mensagem: Retrieving the COM class factory for component with CLSID {6DEDD69A-065F-4781-90A7-35E0E0DEB4BA} failed due to the following error: 8007000e. O componente que está se querendo instanciar é um DTO nosso, e não está sendo possível pelo erro de falta de memória. Encontrei um KB que fala sob

Cakewalk Sonar 7 sem som

Imagem
Fiquei muito feliz nesses últimos dias ao instalar uma nova versão do Cakewalk (agora chamado Sonar) e abrir alguns projetos de músicas da época qu eeu era um aspirante a músico. Um ar nostalgico pairou ao meu redor... No entanto, não consegui ouvir as músicas de primeira. Não tenho equipamento profissional, e para usar esse tipo de programa me valho de MIDI, só que não estava configurado para utilizá-lo, e ao executar a música nada se ouvia. Bom, tive que seguir os passos abaixo, que foram tirados do seguinte post: http://74.125.95.132/search?q=cache:Ps7c-BK3QyQJ:forum.cakewalk.com/fb.asp%3Fgo%3Dnext%26m%3D1304455%26viewType%3Dtm+sonar+7+no+sound&hl=en&ct=clnk&cd=1 Primeiro, fui até o menu Options --> Audio... Na tab Advanced, alterei o Driver Mode para MME (32-bit). Depois disso reiniciei o aplicativo. Quando a nova instância foi aberta, me foi alertado que não havia nenhum output selecionado. Foi então que pude escolher o wavetable da Microsoft para

Como excluir pacotes COM+ que não possuem a opção Delete no menu de contexto

Imagem
Olá! Estou trabalhando em um projeto de uma aplicação que faz instalações de componentes em servidores de forma automatizada. Uma das funcionalidades é criar diretórios virtuais no IIS. Acontece que durante alguns testes dessa funcionalidade, notei que cada vez que os diretórios virtuais eram criados, também era criado um pacote COM+ de nome IIS-{ //ROOT/ }. O engraçado é que mesmo excluindo os diretórios virtuais, esses pacotes permaneciam, e não podiam ser excluídos (não havia a opção Delete no menu de contexto). O problema foi corrigido na aplicação de instalação (não cheguei a ver a causa e correção, mas prometo fazê-lo), no entanto restava a necessidade de remover esses pacotes COM+, já que eram inúteis. Procurei no Google e encontrei uma solução para permitir que os pacotes fossem "excluíveis": usando o COMAdmin, alterar uma propriedade do pacote que libera esta opção. O código utilizado é o abaixo: ICOMAdminCatalog catalogo; ICatalogCollection pacotesCOMPlus; I