articles

Home / DeveloperSection / Articles / Uninstall utility in C#.NET

Uninstall utility in C#.NET

Vijay Shukla8017 10-Oct-2013

Uninstall utility in C#.NET

Here I’m going to demonstrate how to make a small demo for uninstall utility through C#.Net.

1.       Create a project on visual studio with appropriate name.

2.       Create a class with DataBind name

   publicclass DataBind

   {

       publicstring pName { get; set; }

       publicstring pKey { get; set; }

   }

 

3.  Import the DLL [DllImport("msi.dll")]which is helpful for getting the installed product Information

[DllImport("msi.dll")]

static externInt32 MsiGetProductInfo(string product, string property, [Out] StringBuilder valueBuf, refInt32 len);

[DllImport("msi.dll", SetLastError = true)]

staticexternint MsiEnumProducts(int iProductIndex, StringBuilder lpProductBuf);

4.  Create a dataGridBind()method, this method is bind the all installed application list in the DataGridView (dgInstalld). This method is called on Form Load event.

 

privatevoid dataGridBind()

{

   List<DataBind> lstDataBind = newList<DataBind>();

   StringBuilder sbProductCode = newStringBuilder(39);

   int iIdx = 0;

   while (0 == MsiEnumProducts(iIdx++, sbProductCode))

   {

      Int32 productNameLen = 512;

      StringBuilder sbProductName = newStringBuilder(productNameLen);

      MsiGetProductInfo(sbProductCode.ToString(), "ProductName", sbProductName, ref productNameLen);

      lstDataBind.Add(new DataBind{ pKey = sbProductCode.ToString(), pName = sbProductName.ToString() });

   }

   dgInstalld.DataSource = lstDataBind;

   dgInstalld.Columns[0].Width = 332;

   dgInstalld.Columns[1].Width = 248;

   dgInstalld.Columns[0].HeaderText = "Installed Application";

   dgInstalld.Columns[1].HeaderText = "Product Key";

        

}

 

5.       Handle the DataGridView Cell content click event for select the product for uninstall the application

privatevoid dgInstalld_CellContentClick(object sender, DataGridViewCellEventArgs e)

{

    btnUninstall.Enabled = true;

    var cellindex = dgInstalld.SelectedCells[0].RowIndex;

    var cellcollection = dgInstalld.Rows[cellindex].Cells[1];

    pKeyValue = cellcollection.EditedFormattedValue.ToString();

}

 

6.       After that create a method which works for uninstalled the selected application in DataGridView (dgInstalld) to on the basis of installed product Key.

publicvoid Uninstall(string productCode)

{

   try

   {

     Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");

     Installer installer = (Installer)Activator.CreateInstance(type);

     installer.ConfigureProduct(productCode, 0, MsiInstallState.msiInstallStateAbsent);

     pKeyValue = null;

     btnUninstall.Enabled = false;

     dataGridBind();

    }

    catch (Exception ex) {}

}

 

7.       Above Uninstall method is called form uninstall button on click event and it is ask a for uninstalling or not after your confirmation it will uninstall your application.

privatevoid btnUninstall_Click(object sender, EventArgs e)

{

   frmConfirmation frmConfirm = newfrmConfirmation();

   if (pKeyValue != null)

   {

     DialogResult result = MessageBox.Show("Do you really want to uninstall the product?", "Confirm product deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

               

     if(result==DialogResult.Yes)

         Uninstall(pKeyValue);

   }

   else

      btnUninstall.Enabled = false;

}

 

Full Code: -

  publicpartialclassForm1 : Form

    {

        public Form1()

        {

            InitializeComponent();

            btnUninstall.Enabled = false;

        }

        publicclassDataBind

        {

            publicstring pName { get; set; }

            publicstring pKey { get; set; }

        }

        string pKeyValue = null;

        [DllImport("msi.dll", CharSet = CharSet.Unicode)]

        staticexternInt32 MsiGetProductInfo(string product, string property,

            [Out] StringBuilder valueBuf, refInt32 len);

        [DllImport("msi.dll", SetLastError = true)]

        staticexternint MsiEnumProducts(int iProductIndex,

            StringBuilder lpProductBuf);

        privatevoid Form1_Load(object sender, EventArgs e)

        {

            dataGridBind();

        }

 

        privatevoid btnUninstall_Click(object sender, EventArgs e)

        {

            frmConfirmation frmConfirm = newfrmConfirmation();

            if (pKeyValue != null)

            {

                DialogResult result = MessageBox.Show("Do you really want to uninstall the product?", "Confirm product deletion", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

                if(result==DialogResult.Yes)

                   Uninstall(pKeyValue);

            }

            else

                btnUninstall.Enabled = false;

        }

 

        privatevoid dgInstalld_CellContentClick(object sender, DataGridViewCellEventArgs e)

        {

            btnUninstall.Enabled = true;

            var cellindex = dgInstalld.SelectedCells[0].RowIndex;

            var cellcollection = dgInstalld.Rows[cellindex].Cells[1];

            pKeyValue = cellcollection.EditedFormattedValue.ToString();

        }

        publicvoid Uninstall(string productCode)

        {

            try

            {

                Type type = Type.GetTypeFromProgID("WindowsInstaller.Installer");

                Installer installer = (Installer)Activator.CreateInstance(type);

                installer.ConfigureProduct(productCode, 0, MsiInstallState.msiInstallStateAbsent);

                pKeyValue = null;

                btnUninstall.Enabled = false;

                dataGridBind();

            }

            catch (Exception ex) { }

        }

        privatevoid dataGridBind()

        {

            List<DataBind> lstDataBind = newList<DataBind>();

            StringBuilder sbProductCode = newStringBuilder(39);

            int iIdx = 0;

            while (0 == MsiEnumProducts(iIdx++, sbProductCode))

            {

                Int32 productNameLen = 512;

                StringBuilder sbProductName = newStringBuilder(productNameLen);

                MsiGetProductInfo(sbProductCode.ToString(), "ProductName", sbProductName, ref productNameLen);

                lstDataBind.Add(newDataBind { pKey = sbProductCode.ToString(), pName = sbProductName.ToString() });

            }

            dgInstalld.DataSource = lstDataBind;

            dgInstalld.Columns[0].Width = 332;

            dgInstalld.Columns[1].Width = 248;

            dgInstalld.Columns[0].HeaderText = "Installed Application";

            dgInstalld.Columns[1].HeaderText = "Product Key";

         

        }

    }

Output: -

Uninstall utility in C#.NET

In above screen select any product and click to uninstall button then it uninstall wizard will appear.

 


Updated 07-Sep-2019

Leave Comment

Comments

Liked By