这个简短部分的主要任务是获取一些计算机名称并在这台 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 中看到的内容:
.............................
开始属性
名称 = “产品”
ID = 2
访问 = 只读
存储 = 特定
类型 =字符串(64)
值=“\tcc1-pgh10.tcc1.local\swshare$\Packages\NetAgent_10.0.3361\exe”
结束属性
...... …………
他将包的名称裁剪为 64 symb。原因是 Win32_Process.Create 的参数CommandLine有这个限制。我不知道如何克服这个...
Win32_Process.Create 也有属性CurrentDirectory,这似乎可以解决这个问题。但他无法处理 UNC 路径。
而且我不能缩短安装目录。这是不对的。(我可以说我已经做到了。它的工作)
拜托,也许你知道如何用长的安装路径解决这个问题?不同的属性如 TARGETDIR 或 INSTALLDIR 只设置安装路径,没有 FROM...