Páginas

quarta-feira, 4 de fevereiro de 2009

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

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;
ICatalogObject pacoteCOMPlus = null;
catalogo = (ICOMAdminCatalog)Microsoft.VisualBasic.Interaction.CreateObject("COMAdmin.COMAdminCatalog", string.Empty);
pacotesCOMPlus = (ICatalogCollection)catalogo.GetCollection("Applications");
pacotesCOMPlus.Populate();
foreach (ICatalogObject pacote in pacotesCOMPlus)
if (pacote.Name.ToString().ToLower().Equals(textBox1.Text.ToLower().Trim()))
{
pacoteCOMPlus = pacote;
break;
}
if (pacoteCOMPlus != null)
{
pacoteCOMPlus.set_Value("Deleteable", true);
pacotesCOMPlus.SaveChanges();
MessageBox.Show(string.Format("Pode apagar o pacote {0} agora...", textBox1.Text));
}

Obs. textBox1 é o controle da telinha que fiz para rodar o código, e que é preenchida com o nome do pacote COM+.

Com isso, a opção de excluir o pacote COM+ foi habilitada!



[]'s