这个简短部分的主要任务是获取一些计算机名称并在此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 ...
答案 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路径的本地计算机上正常工作