I have read that Win32 will not allow remote invocation of a process that is interactive and I suspect a Console Application is considered to be interactive by Windows and so instead, if I could convert the following code in to a batch file then I am hoping I can remotely run the batch file on the server computer from a client. Feel free to correct this logic if I'm wrong.
我已经读过Win32不允许远程调用交互式进程,我怀疑控制台应用程序被Windows认为是交互式的,所以相反,如果我可以将以下代码转换为批处理文件,那么我希望我可以从客户端远程运行服务器计算机上的批处理文件。如果我错了,请随意纠正这个逻辑。
The code is:
代码是:
namespace PRIMEWebFlyControl
{
class Program
{
// name of the process we will retrieve a handle to
private const string PROCESS_NAME = "PRIMEPipeLine";
private static Process ProgramHandle;
private static string command;
static void Main(string[] args)
{
//Console.WriteLine("This program has been launched remotely!");
TextReader tr = new StreamReader("C:\\inetpub\\wwwroot\\PRIMEWeb\\Executables\\FlyCommand.txt");
command = tr.ReadLine();
tr.Close();
ExecuteCommand();
}
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr handle);
private static void ExecuteCommand() {
if (AssignProcessHandle()) {
IntPtr p = ProgramHandle.MainWindowHandle;
SetForegroundWindow(p);
SendKeys.SendWait(command + "~"); // "~" is equivalent to pressing Enter
}
}
private static bool AssignProcessHandle()
{
// ask the system for all processes that match the name we are looking for
Process[] matchingProcesses = Process.GetProcessesByName(PROCESS_NAME);
// if none are returned then we haven't found the program so return false;
if (matchingProcesses.Length == 0) return false;
// else, set our reference to the running program
ProgramHandle = matchingProcesses[0];
// return true to indicate we have assigned the ref sucessfully
return true;
}
}
}
As you will notice the code contains method calls of Windows library methods like SetForegroundWindow() and as I am unfamiliar with batch files, I wondered how the same thing might be achieved.
正如您将注意到代码包含Windows库方法(如SetForegroundWindow())的方法调用,并且由于我不熟悉批处理文件,因此我想知道如何实现相同的目标。
Many thanks
1 个解决方案
#1
0
If I understand well, you are looking for a command line that will execute a bunch of commands that exist inside a text file named (C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt)
如果我理解得很好,你正在寻找一个命令行来执行一系列命令,这些命令存在于一个名为(C:\ inetpub \ wwwroot \ PRIMEWeb \ Executables \ FlyCommand.txt)的文本文件中。
Here is what you need to do:
这是你需要做的:
cmd < C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt
In case the path contains spaces, use the following command:
如果路径包含空格,请使用以下命令:
cmd < "C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt"
#1
0
If I understand well, you are looking for a command line that will execute a bunch of commands that exist inside a text file named (C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt)
如果我理解得很好,你正在寻找一个命令行来执行一系列命令,这些命令存在于一个名为(C:\ inetpub \ wwwroot \ PRIMEWeb \ Executables \ FlyCommand.txt)的文本文件中。
Here is what you need to do:
这是你需要做的:
cmd < C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt
In case the path contains spaces, use the following command:
如果路径包含空格,请使用以下命令:
cmd < "C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt"