Удалить приложение на удаленном компьютере в режиме без вывода сообщений - PullRequest
1 голос
/ 11 мая 2011

Я разрабатываю программу на C # для удаленного удаления приложения. Он работает нормально, но проблема в том, что он не перечисляет все установленные продукты на конкретном выбранном компьютере.

Код для просмотра списка установленных продуктов с использованием WMI:

void ListAllProducts()
{
    try
    {
        ConnectionOptions connection = new ConnectionOptions();
        connection.Username = Connect.UserName;
        connection.Password = Connect.Password;
        connection.Authority = "ntlmdomain:MSHOME";

        ManagementScope scope = new ManagementScope("\\\\"+ Connect.MachineName +"\\root\\CIMV2", connection);
        scope.Connect();

        ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_Product");

        ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
        System.Threading.Thread.Sleep(5000);

        foreach (ManagementObject queryObj in searcher.Get())
        {
            listBox4.Items.Add(queryObj["Name"].ToString());
            listBox2.Items.Add (queryObj["Name"].ToString ());
            listBox1.Items.Add(queryObj["IdentifyingNumber"].ToString());
            listBox3.Items.Add(queryObj["Version"].ToString());
        }
    }
    catch (ManagementException e)
    {
        MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
    }
}

Код для удаления всего продукта:

void UninstallProduct()
{
    try
    {
        ConnectionOptions connection = new ConnectionOptions();
        connection.Username = Connect.UserName;
        connection.Password = Connect.Password;
        connection.Authority = "ntlmdomain:MSHOME";

        ManagementScope scope = new ManagementScope("\\\\"+Connect.MachineName +"\\root\\CIMV2", connection);
        scope.Connect();

        ManagementObject classInstance = new ManagementObject(scope, new ManagementPath ("Win32_Product.IdentifyingNumber='"+listBox1.Text +"',Name='"+listBox2.Text+"',Version='"+ listBox3.Text+"'"),null);

        // no method in-parameters to define

        // Execute the method and obtain the return values.
        ManagementBaseObject outParams = 
            classInstance.InvokeMethod("Uninstall", null, null);

        // List outParams
       MessageBox.Show ("Uninstallation Starts");
    }
    catch(ManagementException err)
    {
        MessageBox.Show("An error occurred while trying to execute the WMI method: " + err.Message);
    }
}

Пожалуйста, помогите мне составить список всех продуктов, установленных на выбранном компьютере, и удалить его без согласия пользователя этого выбранного компьютера.

Ответы [ 2 ]

1 голос
/ 11 мая 2011

WMI Win32_Product представляет только продукты, установленные установщиком Windows. Чтобы получить список всех установленных продуктов, вам нужно перечислить подразделы раздела реестра SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Чтобы сделать это удаленно, вы можете использовать класс реестра WMI StdRegProv класс. TechNet включает образцы сценариев, которые показывают, как это можно сделать, и которые вы можете адаптировать к вашим конкретным потребностям:

Как вывести список всех установленных приложений на данном компьютере?
Список установленных программ

1 голос
/ 11 мая 2011

Я полагаю, что ваш вопрос связан со знанием того, какие приложения установлены на удаленном компьютере.Как только вы это знаете, вы можете использовать свой код для их удаления.В этом случае вот ссылка на статью о том, как составить список всех приложений (с информацией об их удалении) на удаленном компьютере:

http://mdb -blog.blogspot.com/2010/12/c-check-if-programapplication-is.html

...