Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open remote machine application

Tags:

c#

i'm trying to open remote application(notepad) on windows 7 64. this is what i tried:

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);

This code open the notepad only in the task manager. how can i make the notepad be visable.

thanks.

like image 803
user1528342 Avatar asked Jul 22 '12 12:07

user1528342


People also ask

Can you run applications on the remote machine?

A basic example of Remote Desktop is connecting your home laptop to your office PC so you can access files, run applications, print documents, etc. on that PC without going into the office. However, the host device does not have to be a PC.

How do I open an app remotely?

Launch an app on Android devices. Click on the device on which you have to launch the app. Go to Actions > Remote App Launch. Select the application from the drop-down list. Remote app launch can be configured with any of these settings.

What is a remote software application?

Remote desktop software, also known as remote access software, allows a user to seamlessly connect to and interact with a computer in another location via an internal network or the internet.

How can I access my computer remotely?

Use Remote Desktop to connect to the PC you set up: On your local Windows PC: In the search box on the taskbar, type Remote Desktop Connection, and then select Remote Desktop Connection. In Remote Desktop Connection, type the name of the PC you want to connect to (from Step 1), and then select Connect.


1 Answers

The process not showing is by design for security purposes in WMI. The best option I'm aware of is to use Win32_ScheduledJob to schedule a time for the application to start in an interactive manner.

The following code is untested but I think should do what you want with some tweaking.

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

*/
like image 156
Kendall Trego Avatar answered Oct 08 '22 02:10

Kendall Trego