我有一个非常简单的WMI方法,它连接到远程服务器以启动批处理文件。
此执行的返回码为0,告诉我它成功了。如果我更改批处理文件的路径,它会返回9,所以我知道它正在找到命令文件。
问题是,当我查看服务器时,我可以看到没有发生任何事情。这个批处理文件的第一件事就是从驱动器中删除GIT仓库。
我的代码是:
public object[] ProcessToRun;
public void StartBuild()
{
ProcessToRun = BuildServerInfo.SelectedBranch == BuildServerBranch.Branch.Development ? new object[] { "c:\\src\\Build\\Batch1_Development.cmd" } : new object[] { "c:\\src\\Build\\Batch2_Release_Candidate.cmd" };
var connection = new ConnectionOptions();
connection.Impersonation = ImpersonationLevel.Impersonate;
connection.Authentication = AuthenticationLevel.Packet;
connection.EnablePrivileges = true;
connection.Timeout = new TimeSpan(0,0,15);
var mp = new ManagementPath("\\\\" + BuildServerInfo.BuildServer + "\\root" + "\\cimv2:Win32_LogicalDisk.DeviceID=\"C:\"");
var ms = new ManagementScope(mp, connection);
var mprocess = new ManagementClass(ms, new ManagementPath("Win32_Process"), new ObjectGetOptions());
var results = mprocess.InvokeMethod("Create", ProcessToRun);
}
这是代码的问题,还是我需要对我的服务器做些什么?服务器是Windows 2008 R2。
感谢。
编辑:我的帐户具有完全管理员权限,CIMV2 \ Security下的WMI用户具有完全访问权限。
答案 0 :(得分:4)
看来我需要设置工作目录才能使执行工作。我创建了inParams并更改了我的Invoke以使用它们:
var inParams = mprocess.GetMethodParameters("Create");
inParams["CommandLine"] = @"c:\src\Build\Batch1_Development.cmd";
inParams["CurrentDirectory"] = @"c:\src\Build";
var outParams = mprocess.InvokeMethod("Create", inParams, null);