none
How to launch an application in remote machine using WMI? RRS feed

  • 问题

  • Hi There,

    Is there any method to launch an application in remote machine? Now i could only do simple thing like "Shutdown", "Reboot". But i do not know how to launch an application. Such as there is  an application named "mytool.exe" in "C:\11\" in remote machine, how to launch it in my work machine?

    Thank

     ConnectionOptions options = new ConnectionOptions();
                options.Username = this.txtUserName.Text.Trim();
                options.Password = this.txtPassword.Text.Trim();
                options.EnablePrivileges = true;
    
                ManagementScope scope = new ManagementScope(@"\\" + this.txtIP.Text.Trim() + @"\root\cimv2", options);
                scope.Connect();
    
                if (scope.IsConnected)
                {
                    ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
                    ManagementObjectSearcher search = new ManagementObjectSearcher(scope, query);
                    ManagementObjectCollection collection = search.Get();
         
                    foreach (ManagementObject mo in collection)
                    {
                        mo.InvokeMethod("reboot", new object[] { "" });
                    }
                }

    s!

    2012年9月24日 8:10

答案

  • ConnectionOptions   connOP   =   new   ConnectionOptions();
    connOP.Username   =    "192.168.0.1\\username ";
    connOP.Password   =    "password ";
    ManagementPath   RemoteNameSpace   =   new   ManagementPath( "\\\\192.168.0.1\\root\\cimv2 ");
    ManagementScope   Ms   =   new   ManagementScope(RemoteNameSpace,connOP);
    Ms.Connect(); 
    ManagementClass   processClass   =   new   ManagementClass(Ms,new   ManagementPath( "Win32_Process "),null);  
    ManagementBaseObject   inParams   =   processClass.GetMethodParameters( "Create "); 
    inParams[ "CommandLine "]   =    "D:\\test.exe "; 
    ManagementBaseObject   outParams   =   processClass.InvokeMethod   ( "Create ",   inParams,   null);
    • 已标记为答案 Richard_Wu 2012年9月25日 2:13
    2012年9月24日 8:23

全部回复

  • ConnectionOptions   connOP   =   new   ConnectionOptions();
    connOP.Username   =    "192.168.0.1\\username ";
    connOP.Password   =    "password ";
    ManagementPath   RemoteNameSpace   =   new   ManagementPath( "\\\\192.168.0.1\\root\\cimv2 ");
    ManagementScope   Ms   =   new   ManagementScope(RemoteNameSpace,connOP);
    Ms.Connect(); 
    ManagementClass   processClass   =   new   ManagementClass(Ms,new   ManagementPath( "Win32_Process "),null);  
    ManagementBaseObject   inParams   =   processClass.GetMethodParameters( "Create "); 
    inParams[ "CommandLine "]   =    "D:\\test.exe "; 
    ManagementBaseObject   outParams   =   processClass.InvokeMethod   ( "Create ",   inParams,   null);
    • 已标记为答案 Richard_Wu 2012年9月25日 2:13
    2012年9月24日 8:23
  • thanks a lot, but i tried with following code, nothing happened.

                    ManagementClass processClass = new ManagementClass(scope, new ManagementPath("Win32_Process"), null);
                    ManagementBaseObject inParams = processClass.GetMethodParameters("Create");
                    inParams["CommandLine"] = @"C:\Program Files\Notepad++\notepad++.exe";
                    ManagementBaseObject outParams = processClass.InvokeMethod("Create", inParams, null);


    2012年9月24日 9:49
  • 会有权限的问题,你考虑使用域管理员的帐户测试下。
    2012年9月25日 1:56
  • 我使用的就是管理员权限。我刚查看了下返回值,以及在远程机器任务管理器中找到了启动的程序。但我为什么却没有看到这个程序的启动,不知这和普通启动程序方式(比如双击exe)有什么区别?

    2012年9月25日 2:15
  • 我也没研究过,你说的“没有看到程序的启动”和“在远程机器任务管理器中找到了启动的程序”是否矛盾?

    你可以查看下进程树,这两种启动方式的父进程应该是有区别的。

    2012年9月25日 5:31
  • 不好意思,我表述的可能不太清楚。比如说手工启动“Notepad++”, 那Notepad的GUI会显示出来,在任务管理器里Applications会有notepad++,同时Processes里面也有notepad++的进程。但如果通过WMI的方式来启动,GUI不会显示,Applications里不会有记录,只有Processes里会有记录。

    我想请教的是这两种方式区别在哪里? 或者说,我通过WMI启动notepad后,我想输入语句怎么办?

    2012年9月25日 5:39