Как я могу преобразовать этот код C # в код пакетного файла? - PullRequest
0 голосов
/ 23 мая 2011

Я прочитал, что 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 (), и, поскольку я незнаком с пакетными файлами, я удивился, как можно добиться того же самого.

Большое спасибо

1 Ответ

0 голосов
/ 20 июня 2011

Если я правильно понимаю, вы ищете командную строку, которая выполнит набор команд, существующих в текстовом файле с именем (C: \ inetpub \ wwwroot \ PRIMEWeb \ Executables \ FlyCommand.txt)

Вот что вам нужно сделать:

cmd < C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt

Если путь содержит пробелы, используйте следующую команду:

cmd < "C:\inetpub\wwwroot\PRIMEWeb\Executables\FlyCommand.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...