Windows Management Instrumentation msi install remote machine

我与影子孤独终老i 提交于 2019-12-12 05:58:45

问题


I'm trying to install a msi on a remote machine , i changed DCOM Config to get access from my machine when using methode install of win32_product it fails with return output 1601 ( that means that Windows Installer service could not be accessed ) i did some research in the net , and run the service manually using services.msc and did msiexec / unreg and msiexec /register , still not working ps: both machines a running on windows 10 here is my code

Ps : i used the same code for win32_Bios to get SerialNumber and it works

try

        {
\\machine is the name of the computer

            string PackageLocation = @"\\" + machine + msi;

            ConnectionOptions connection = new ConnectionOptions();

            connection.Username = username;

            connection.Password = password;

            connection.Impersonation = ImpersonationLevel.Impersonate;

            connection.Authentication = AuthenticationLevel.Default;
            connection.EnablePrivileges = true;
            //define the WMI root name space

            ManagementScope scope =

            new ManagementScope(@"\\" + machine + @"\root\CIMV2", connection);

            //define path for the WMI class

            ManagementPath p =

            new ManagementPath("Win32_Product");

            //define new instance

            ManagementClass classInstance = new ManagementClass(scope, p, null);


            // Obtain in-parameters for the method

            ManagementBaseObject inParams = classInstance.GetMethodParameters("Install");

            // Add the input parameters.

            inParams["AllUsers"] = true; //to install for all users

            inParams["Options"] = ""; //paramters must be in the format “property=setting“
            inParams["PackageLocation"] = @"c:\install\installer.msi";
//source file must be on the remote machine
            // Execute the method and obtain the return values.

            ManagementBaseObject outParams = classInstance.InvokeMethod("Install", inParams, null);

            // List outParams

            string retVal = outParams["ReturnValue"].ToString();

            string msg = null;

            switch (retVal)

            {
                case "0":

                    msg = "The installation completed successfully.";

                    break;

                case "2":

                    msg = "The system cannot find the specified file. \n\r\n\r" + msi;

                    break;

                case "3":

                    msg = "The system cannot find the path specified. \n\r\n\r" + msi;

                    break;

                case "1619":

                    msg = "This installation package \n\r\n\r " + msi + "\n\r\n\rcould not be opened, please verify that it is accessible.";

                    break;

                case "1620":

                    msg = "This installation package \n\r\n\r " + msi + "\n\r\n\rcould not be opened, please verify that it is a valid MSI package.";

                    break;

                default:

                    msg = "Please see... \n\r\n\r http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msi/setup/error_codes.asp \n\r\n\rError code: " + retVal;

                    break;
            }

            // Display outParams

            Console.WriteLine(msg, "Installation report");
        }
        catch (ManagementException me)

        {
            Console.WriteLine(me.Message + "Management Exception");
        }
        catch (COMException ioe)

        {
            Console.WriteLine(ioe.Message, "COM Exception");
        }
    }

来源:https://stackoverflow.com/questions/43180599/windows-management-instrumentation-msi-install-remote-machine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!