我正在尝试在Windows 7 64上打开远程应用程序(记事本)。 这就是我的尝试:
object[] theProcessToRun = {"notepad"};
ConnectionOptions theConnection = new ConnectionOptions();
theConnection.Username = "user";
theConnection.Password = "pass";
ManagementScope theScope = new ManagementScope("\\\\" + ip + "\\root\\cimv2",
theConnection);
ManagementClass theClass = new ManagementClass(theScope,
new ManagementPath("Win32_Process"), new ObjectGetOptions());
theClass.InvokeMethod("Create", theProcessToRun);
此代码仅在任务管理器中打开记事本。 我怎样才能使记事本可见。
感谢。
答案 0 :(得分:2)
未显示的流程为by design for security purposes in WMI。我所知道的最好的选择是使用Win32_ScheduledJob来安排应用程序以交互方式启动的时间。
以下代码未经测试,但我认为应该通过一些调整来做你想做的事。
using System;
using System.Management;
using System.Reflection;
class ScheduleJob
{
public static uint Create (
string Command,
uint DaysOfMonth,
uint DaysOfWeek,
bool InteractWithDesktop,
bool RunRepeatedly,
string StartTime, // in DMTF format !
out uint JobId)
{
// See: Platform SDK (or WMI SDK) doc's for detailed info about 'Win32_ScheduledJob' class
ManagementBaseObject inputArgs = null;
ManagementClass classObj = new ManagementClass (null, "Win32_ScheduledJob", null);
inputArgs = classObj.GetMethodParameters ("Create");
inputArgs ["Command"] = Command;
inputArgs ["DaysOfMonth"] = DaysOfMonth;
inputArgs ["DaysOfWeek"] = DaysOfWeek;
inputArgs ["InteractWithDesktop"] = InteractWithDesktop;
inputArgs ["RunRepeatedly"] = RunRepeatedly;
inputArgs ["StartTime"] = StartTime;
// use late binding to invoke "Create" method on "Win32_ScheduledJob" WMI class
ManagementBaseObject outParams = classObj.InvokeMethod ("Create", inputArgs, null);
JobId = ((uint)(outParams.Properties ["JobId"].Value));
return ((uint)(outParams.Properties ["ReturnValue"].Value));
}
// Delete the Scheduled (JobID)
public static uint Delete (uint JobID)
{
ManagementObject mo;
ManagementPath path = ManagementPath.DefaultPath;
path.RelativePath = "Win32_ScheduledJob.JobId=" + "\"" + JobID + "\"";
mo = new ManagementObject (path);
ManagementBaseObject inParams = null;
// use late binding to invoke "Delete" method on "Win32_ScheduledJob" WMI class
ManagementBaseObject outParams = mo.InvokeMethod ("Delete", inParams, null);
return ((uint)(outParams.Properties ["ReturnValue"].Value));
}
public static string ToDMTFTime (DateTime dateParam)
{
string tempString = dateParam.ToString ("********HHmmss.ffffff");
TimeSpan tickOffset = TimeZone.CurrentTimeZone.GetUtcOffset (dateParam);
tempString += (tickOffset.Ticks >= 0) ? '+' : '-';
tempString += (Math.Abs (tickOffset.Ticks) / System.TimeSpan.TicksPerMinute).ToString ("d3");
return tempString;
}
}
class JobScheduler
{
public static void Main ()
{
uint JobID;
DateTime dt = DateTime.Now; // Get current DateTime
dt = dt.AddMinutes (1); //add 1 minute to current time
string LocalDateTime = ScheduleJob.ToDMTFTime (dt); // convert to DMTF format
// Schedule Notepad to run every Sunday and Wednesday
uint ret = ScheduleJob.Create (
// @"runas /user:administrator\domain /profile cmd ",
@"c:\winnt\notepad.exe",
0, 32, true, true, LocalDateTime, out JobID);
if (ret == 0) { // sucess
Console.WriteLine ("Wait for Job to be scheduled and Press: <Enter> to delete");
Console.ReadLine (); // For test purposes - Wait for job to be scheduled.
ret = ScheduleJob.Delete (JobID); // Get rid of this Job
}
Console.WriteLine (ret);
}
}
/* Days of week
Sunday 64,
Monday 1,
Tuesday 2,
Wednesday 4,
Thursday 8,
Friday 16,
Saturday 32
*/