Question

Je suis en train d'écrire un mini exécutable W32 à désinstaller à distance une application utilisant WMI.

Je peux lister toutes les applications installées en utilisant ce code ci-dessous, mais je ne pouvais pas trouver un moyen de désinstaller l'application à distance à travers WMI et C #

Je sais que je peux le faire même en utilisant msiexec comme un processus, mais je veux résoudre ce WMI en utilisant si son possible ...

Merci, Cem

static void RemoteUninstall(string appname)
{
    ConnectionOptions options = new ConnectionOptions();
    options.Username = "administrator";
    options.Password = "xxx";
    ManagementScope scope = new ManagementScope("\\\\192.168.10.111\\root\\cimv2", options);
    scope.Connect();


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

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    ManagementObjectCollection queryCollection = searcher.Get();

    foreach (ManagementObject m in queryCollection)
    {
        // Display the remote computer information

        Console.WriteLine("Name : {0}", m["Name"]);

        if (m["Name"] == appname)
        {
            Console.WriteLine(appname + " found and will be uninstalled... but how");
            //need to uninstall this app...
        }
    }

}
Était-ce utile?

La solution

Jetez un oeil à code WMI créateur (un outil gratuit de Microsoft) -. il peut générer un code WMI pour vous dans différentes langues, y compris C #

Voici un exemple illustrant l'utilisation de la méthode Win32_Product.Uninstall. Vous devez connaître le GUID, le nom et la version de l'application que vous souhaitez désinstaller, car ils sont les principales propriétés de la classe Win32_Product:

...

ManagementObject app = 
    new ManagementObject(scope, 
    "Win32_Product.IdentifyingNumber='{99052DB7-9592-4522-A558-5417BBAD48EE}',Name='Microsoft ActiveSync',Version='4.5.5096.0'",
    null);

ManagementBaseObject outParams = app.InvokeMethod("Uninstall", null);

Console.WriteLine("The Uninstall method result: {0}", outParams["ReturnValue"]);

Si vous avez les informations partielles sur l'application (par exemple uniquement le nom ou le nom et la version), vous pouvez utiliser une requête SELECT pour obtenir l'objet Win32_Process correspondant:

...
SelectQuery query = new SelectQuery("Win32_Product", "Name='Microsoft ActiveSync'");

EnumerationOptions enumOptions = new EnumerationOptions();
enumOptions.ReturnImmediately = true;
enumOptions.Rewindable = false;

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, options);

foreach (ManagementObject app in searcher.Get())
{
    ManagementBaseObject outParams = app.InvokeMethod("Uninstall", null);

    Console.WriteLine("The Uninstall method result: {0}", outParams["ReturnValue"]);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top