在Win32_Process上远程运行msiexec
本文关键字:运行 msiexec 程运行 Win32 Process | 更新日期: 2023-09-27 18:06:44
这一小部分的主要任务是获得一些计算机名称并在这台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属性
NAME = "Product"
ID = 2
ACCESS = READ-ONLY
STORAGE = SPECIFIC
TYPE = STRING(64)
VALUE = "'tcc1-pgh10.tcc1.local'swshare$'Packages'NetAgent_10.0.3361'exe"
终端属性
..............................
将包的名称裁剪为64个符号。原因是Win32_Process的CommandLine参数。Create有这个限制。我不知道该如何克服……
Win32_Process。Create还有属性CurrentDirectory,这似乎可以解决这个问题。但是他不能处理UNC路径。
和我不能做更短的安装目录。这是不对的。我可以说我已经做到了。它起作用了)
请,也许你知道如何解决这个问题与长安装路径?
我放弃了
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,包括path。它只能在本地机器上正常工作,而不使用UNC路径