由于我经常在Microsoft Visual Studio 2017的内部/外部测试二进制文件,因此我想控制C / C ++控制台项目中代码的行为。
我应该使用什么标志或功能来了解我的 .exe 是否从Visual Studio内部启动。
我想实现的是:
#if !_RELEASE
system("pause"); // prevents auto shutdown of my .exe in Explorer
// double click
#endif
其中_RELEASE是某种特质,可在Studio启动时触发代码, 但在资源管理器中不可见。
答案 0 :(得分:1)
我应该使用什么标志或函数来知道我的过程是否从Visual Studio内部启动。
您不应从程序代码内部进行此类行为控制。这是糟糕的设计,会使您的程序代码杂乱无章,应由调用者决定。
我建议如果您需要程序的其他行为(例如在后台运行或使用可见的GUI),则应使用例如配置文件或命令行参数。
您可以为Visual Studio设置和/或cmd行参数都指定cmd行参数,或者使用其他配置文件,甚至可以将两者结合使用。
您似乎坚持要以最佳方式解决这个想法:
您可以使用WINAPI函数来迭代父进程ID,并检查其中一个是否与“ Visual Studio ”模块匹配。
这是与该技术链接的问答:
答案 1 :(得分:-3)
这不是完全解决方案,但是:
Raymond Chen (Microsoft winapi guru *)在精神上最接近我所面临的问题,可以帮助我确定在哪种模式或情况下运行控制台会话。
How can I tell whether my console program was launched from Explorer or from a command prompt?
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);
}