Действительно ли возможно создать Консольное приложение, которое не отображает консоль когда дважды щелкнувший?

Вы только получаете выстрел того в наследование. При создании абстрактного класса, а не интерфейса, кто-то, кто наследовался класс не может также наследовать другой абстрактный класс.

19
задан 13 revs, 3 users 55% 29 April 2019 в 04:05
поделиться

4 ответа

См. Может ли консольное приложение Win32 определить, было ли оно запущено из проводника или нет?

Или я думаю, что официальный способ проверить, что родительский процесс - это cmd.exe или explorer.exe

3
ответ дан 30 November 2019 в 05:12
поделиться

Просто создайте его как приложение Windows Forms, но не давайте ему графический интерфейс. К сожалению, вы не получите никакого вывода на консоль и при запуске из командной строки ... это проблема?

4
ответ дан 30 November 2019 в 05:12
поделиться

Итак, я Написал инструменты с графическим интерфейсом и интерфейсом командной строки. Сложнее всего было выяснить, какой из них открыть - однако в нашем случае версия CLI имела необходимые параметры, поэтому я просто открывал графический интерфейс, если не было никаких параметров. Затем, если им действительно нужна консоль, вызовите функцию, которая выглядит примерно так:

private const int ATTACH_PARENT_PROCESS = -1;
private const int ERROR_INVALID_HANDLE = 6;
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
[DllImport("kernel32.dll")]
static extern bool FreeConsole();

private static bool StartConsole()
{
  if (!AttachConsole(ATTACH_PARENT_PROCESS)) // try connecting to an existing console  
  {  
      if (Marshal.GetLastWin32Error() == ERROR_INVALID_HANDLE) // we don't have a console yet  
      {  
          if (!AllocConsole()) // couldn't create a new console, either  
              return false;  
      }
      else
          return false; // some other error
  }
  return true;
}

Возвращает, была ли создана консоль. Когда закончите, не забудьте вызвать FreeConsole ()!

В нашем случае, конечно, если мы не создаем консоль, мы создаем графический интерфейс. Было бы так же легко создать либо консоль, либо без пользовательского интерфейса.

РЕДАКТИРОВАТЬ: Это совершенно не отвечало на вопрос в редактировании, которого не было, когда я начинал писать это , конечно. Помимо этого, наш хак просто проверял, был ли он вызван с параметрами командной строки или нет.

Сложнее всего было выяснить, какой из них открыть - однако в нашем случае версия CLI имела необходимые параметры, поэтому я просто открывал графический интерфейс, если не было никаких параметров. Затем, если им действительно нужна консоль, вызовите функцию, которая выглядит примерно так:

private const int ATTACH_PARENT_PROCESS = -1;
private const int ERROR_INVALID_HANDLE = 6;
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
[DllImport("kernel32.dll")]
static extern bool FreeConsole();

private static bool StartConsole()
{
  if (!AttachConsole(ATTACH_PARENT_PROCESS)) // try connecting to an existing console  
  {  
      if (Marshal.GetLastWin32Error() == ERROR_INVALID_HANDLE) // we don't have a console yet  
      {  
          if (!AllocConsole()) // couldn't create a new console, either  
              return false;  
      }
      else
          return false; // some other error
  }
  return true;
}

Возвращает, была ли создана консоль. Не забудьте вызвать FreeConsole (), когда закончите!

В нашем случае, конечно, если мы не создаем консоль, мы создаем графический интерфейс. Было бы так же легко создать либо консоль, либо без пользовательского интерфейса.

РЕДАКТИРОВАТЬ: Это совершенно не отвечало на вопрос в редактировании, которого не было, когда я начинал писать это , конечно. Помимо этого, наш хак просто проверял, был ли он вызван с параметрами командной строки или нет.

Сложнее всего было выяснить, какой из них открыть - однако в нашем случае версия CLI имела необходимые параметры, поэтому я просто открывал графический интерфейс, если не было никаких параметров. Затем, если им действительно нужна консоль, вызовите функцию, которая выглядит примерно так:

private const int ATTACH_PARENT_PROCESS = -1;
private const int ERROR_INVALID_HANDLE = 6;
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
[DllImport("kernel32.dll")]
static extern bool FreeConsole();

private static bool StartConsole()
{
  if (!AttachConsole(ATTACH_PARENT_PROCESS)) // try connecting to an existing console  
  {  
      if (Marshal.GetLastWin32Error() == ERROR_INVALID_HANDLE) // we don't have a console yet  
      {  
          if (!AllocConsole()) // couldn't create a new console, either  
              return false;  
      }
      else
          return false; // some other error
  }
  return true;
}

Возвращает, была ли создана консоль. Когда закончите, не забудьте вызвать FreeConsole ()!

В нашем случае, конечно, если мы не создаем консоль, мы создаем графический интерфейс. Было бы так же легко создать либо консоль, либо без пользовательского интерфейса.

РЕДАКТИРОВАТЬ: Это совершенно не отвечало на вопрос в редактировании, которого не было, когда я начинал писать это , конечно. Помимо этого, наш хак просто проверял, был ли он вызван с параметрами командной строки или нет.

поэтому я просто открыл графический интерфейс, если не было никаких параметров. Затем, если им действительно нужна консоль, вызовите функцию, которая выглядит примерно так:

private const int ATTACH_PARENT_PROCESS = -1;
private const int ERROR_INVALID_HANDLE = 6;
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
[DllImport("kernel32.dll")]
static extern bool FreeConsole();

private static bool StartConsole()
{
  if (!AttachConsole(ATTACH_PARENT_PROCESS)) // try connecting to an existing console  
  {  
      if (Marshal.GetLastWin32Error() == ERROR_INVALID_HANDLE) // we don't have a console yet  
      {  
          if (!AllocConsole()) // couldn't create a new console, either  
              return false;  
      }
      else
          return false; // some other error
  }
  return true;
}

Возвращает, была ли создана консоль. Когда закончите, не забудьте вызвать FreeConsole ()!

В нашем случае, конечно, если мы не создаем консоль, мы создаем графический интерфейс. Было бы так же легко создать либо консоль, либо без пользовательского интерфейса.

РЕДАКТИРОВАТЬ: Это совершенно не отвечало на вопрос в редактировании, которого не было, когда я начинал писать это , конечно. Помимо этого, наш хак просто проверял, был ли он вызван с параметрами командной строки или нет.

поэтому я просто открыл графический интерфейс, если не было никаких параметров. Затем, если им действительно нужна консоль, вызовите функцию, которая выглядит примерно так:

private const int ATTACH_PARENT_PROCESS = -1;
private const int ERROR_INVALID_HANDLE = 6;
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool AttachConsole(int dwProcessId);
[DllImport("kernel32.dll")]
static extern bool AllocConsole();
[DllImport("kernel32.dll")]
static extern bool FreeConsole();

private static bool StartConsole()
{
  if (!AttachConsole(ATTACH_PARENT_PROCESS)) // try connecting to an existing console  
  {  
      if (Marshal.GetLastWin32Error() == ERROR_INVALID_HANDLE) // we don't have a console yet  
      {  
          if (!AllocConsole()) // couldn't create a new console, either  
              return false;  
      }
      else
          return false; // some other error
  }
  return true;
}

Возвращает, была ли консоль создана. Когда закончите, не забудьте вызвать FreeConsole ()!

В нашем случае, конечно, если мы не создаем консоль, мы создаем графический интерфейс. Было бы так же легко создать консоль или без пользовательского интерфейса.

РЕДАКТИРОВАТЬ: Это совершенно не отвечало на вопрос в редактировании, которого не было, когда я начал писать , конечно. Помимо этого, наш хак просто проверял, был ли он вызван с параметрами командной строки или нет.

не забудьте использовать FreeConsole (), когда закончите!

В нашем случае, конечно, если мы не создаем консоль, мы создаем графический интерфейс. Было бы так же легко создать либо консоль, либо без пользовательского интерфейса.

РЕДАКТИРОВАТЬ: Это совершенно не отвечало на вопрос в редактировании, которого не было, когда я начинал писать это , конечно. Помимо этого, наш хак просто проверял, был ли он вызван с параметрами командной строки или нет.

не забудьте использовать FreeConsole (), когда закончите!

В нашем случае, конечно, если мы не создаем консоль, мы создаем графический интерфейс. Было бы так же легко создать либо консоль, либо без пользовательского интерфейса.

РЕДАКТИРОВАТЬ: Это совершенно не отвечало на вопрос в редактировании, которого не было, когда я начинал писать это , конечно. Помимо этого, наш хак просто проверял, был ли он вызван с параметрами командной строки или нет.

5
ответ дан 30 November 2019 в 05:12
поделиться

Тогда это будет больше похоже на Службу?

ИЛИ

А как насчет приложения Windows Forms, у которого нет видимой формы? Он все равно будет отображаться в списке процессов диспетчера задач.

0
ответ дан 30 November 2019 в 05:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: