Postagens

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 add-in ...

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 sobre ...

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 simular os sons do...

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; ICatalog...

Operador yield no C#

Imagem
Hoje encontrei um operador no C# que desconhecia, o yield . Ele serve para manter estado quando se percorre uma coleção de objetos, e está intimente ligado à implementação do pattern Iterator dentro do C#. Na prática, ele pode ser aplicado quando temos métodos que retornam um IEnumerable . No exemplo abaixo, eu tenho um método que percorre as datas de finais de semana (Sábado e Domingo) dado um ano. Veja que este método é chamado dentro de um foreach , e cada iteração ele exibe uma data na tela. Não estou preocupado, dentro do foreach , em saber qual foi a última data que foi exibida, isso é controlado internamente durante a iteração, que vai mantendo o loop "ativo" através do operador yield . Feliz Natal e até a próxima! using System; using System.Collections.Generic; namespace TesteYield { class Program { static void Main(string[] args) { Console.WriteLine("Finais de semana de 2009:"); foreach (DateTime data in...