在Win32_Process上远程运行msiexec

时间:2013-04-01 12:52:19

标签: c# msiexec win32-process

这个简短部分的主要任务是获取一些计算机名称并在此PC上安装所需的软件(通过msiexec.exe)

我这样做

    {                       

            Credential creds = new Credential();
            UserAttr UserCredential = new UserAttr();
            UserCredential = creds.DefaultFlagsTest();              
            ConnectionOptions connection = new ConnectionOptions();
            connection.Username = UserCredential.UserName;
            connection.Password = UserCredential.password;
            connection.Authentication = AuthenticationLevel.PacketPrivacy; 
            connection.Authority = "ntlmdomain:tcc1";

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

            ManagementClass classInstance =
                new ManagementClass(scope,
                new ManagementPath("Win32_Process"), null);

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

            inParams["CommandLine"] = @"msiexec.exe /qb /m log.mif /i ""\\tcc1-pgh10.tcc1.local\swshare$\Packages\NetAgent_10.0.3361\exec\Kaspersky Network Agent.msi""";       

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

            int res = int.Parse(outParams["ReturnValue"].ToString());

            if (res == 0)
            {
                MessageBox.Show(outParams["ReturnValue"].ToString(), "Result");                   
            }
            else throw new System.ComponentModel.Win32Exception(res);             

            Close();           
    }

程序返回0,但它并不意味着msiexec完成同样的成功。错误是检查包的路径 ..或smth。但我在日志文件log.mif中看到的内容:

..............................
    START ATTRIBUTE
      NAME =“产品”
      ID = 2
      ACCESS = READ-ONLY
      存储=特定
      TYPE = STRING(64)
       VALUE =“\ tcc1-pgh10.tcc1.local \ swshare $ \ Packages \ NetAgent_10.0.3361 \ exe”
    结束属性
..............................

他在64 symb处裁剪包的名称。原因是Win32_Process.Create的parametr CommandLine 具有此限制。 我不知道如何克服这个......

Win32_Process.Create也有属性 CurrentDirectory ,似乎可以解决这个问题。但他无法处理UNC路径。

我无法缩短安装目录。这是不对的。 (而且我可以说我已经完成了这个。而且它有效)

拜托,也许您知道如何通过长安装路径解决这个问题? 不同的属性如TARGETDIR或INSTALLDIR只设置路径TO安装,没有FROM ...

1 个答案:

答案 0 :(得分:0)

我放弃了

START ATTRIBUTE 
NAME = "Product" 
ID = 2 
ACCESS = READ-ONLY 
STORAGE = SPECIFIC 
TYPE = STRING(64) 
VALUE = "\tcc1-pgh10.tcc1.local\swshare$\Packages\NetAgent_10.0.3361\exe"
END ATTRIBUTE

该值限制为64symb,包括路径。它将仅在不使用UNC路径的本地计算机上正常工作