Мое приложение запускается изнутри Visual Studio против выполнения файла EXE - PullRequest
0 голосов
/ 06 апреля 2019

Поскольку я часто тестирую свои двоичные файлы внутри / вне Microsoft Visual Studio 2017, я хочу контролировать поведение своего кода в консольных проектах C / C ++.

  • Один для кода, когда я запускаю.exe из Visual Studio в режиме Release .
  • Другой, когда я просто щелкаю свой .exe из Проводника.

Какой флаг или функцию мне нужноиспользуйте , чтобы узнать, был ли мой .exe запущен из Visual Studio или нет.

То, что я хотел бы достичь, это:

#if !_RELEASE
    system("pause"); // prevents auto shutdown of my .exe in Explorer
                     // double click
#endif

, где _RELEASE - это некая черта, запускающая код в Studio, но не видимая в двойном щелчке проводника.

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Какой флаг или функцию я должен использовать, чтобы знать, был ли мой процесс запущен из Visual Studio или нет.

  1. Вы не должны делать такое управление поведением из своего программного кода. Это плохой дизайн и загромождает ваш программный код решениями, которые следует оставить вызывающей стороне.
    Я бы порекомендовал, если вам нужно другое поведение вашей программы (например, работа в фоновом режиме или с видимым графическим интерфейсом), это должно контролироваться, например, с помощью файлы конфигурации или параметры командной строки.
    Вы можете сделать это для обоих параметров Visual Studio, чтобы указать параметры строки cmd, или использовать другой файл конфигурации, или даже комбинацию обоих.

  2. Как вы, кажется, настаиваете на решении своей идеи, как лучше всего поиграть с этим:
    Вы можете использовать функции WINAPI для перебора идентификаторов ваших родительских процессов и проверки соответствия одного из них модулю "Visual Studio ".
    Вот вопросы и ответы, которые связаны с техникой:

0 голосов
/ 06 апреля 2019

Это не совсем решение, но:

Раймонд Чен (Microsoft winapi guru *) наиболее близок по духу к проблеме, с которой я сталкиваюсь, помогая мне определить, в каком режиме или обстоятельствах язапустите сеанс консоли.

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

printf("this process = %d\n", GetCurrentProcessId());
DWORD count = GetConsoleProcessList(nullptr, 0);
if (count == 1) {
    printf("I'm the last one!\n");
    Sleep(2000);
}
else {
    printf("I'm not the last one! %d\n", count);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...