Я прочитал, что Win32 не разрешит удаленный вызов интерактивного процесса, и я подозреваю, что консольное приложение считается интерактивным в Windows, и поэтому вместо этого, если бы я мог преобразовать следующий код в пакетный файл, то я Я надеюсь, что я могу удаленно запустить пакетный файл на компьютере-сервере с клиента. Не стесняйтесь исправлять эту логику, если я ошибаюсь.
Код:
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;
}
}
}
Как вы заметили, код содержит вызовы методов библиотечных методов Windows, таких как SetForegroundWindow (), и, поскольку я незнаком с пакетными файлами, я удивился, как можно добиться того же самого.
Большое спасибо