Я работаю в Visual Studio 2017. В моем текущем решении у меня есть 2 активных проекта. Второй проект зависит от первого проекта, а мой второй проект - это мое стартовое приложение. Когда я запускаю или компилирую свой второй проект, уже есть скомпилированный исполняемый файл моего первого проекта, который находится в моем каталоге решений ...
Вот иерархия каталогов моих решений - проекты:
"SolutionName/Project1/"
- Содержит исходный код для Project1
"SolutionName/Project2/"
- Это содержит исходный код для Project2
"SolutionName/x64/"
"SolutionName/x64/Debug"
- Содержит x64 отладочные сборки и исполняемые файлы
"SolutionName/x64/Release"
- Сюда входят сборки выпуска x64 и исполняемые файлы
Когда я запустите приложение со вторым проектом в качестве моего запуска ... Код компилируется и работает нормально, однако, похоже, он не выполняет исполняемый файл из 1-го проекта ...
Вот мой файл main. cpp
#include <Windows.h>
#include <exception>
#include <stdio.h>
#include <tchar.h>
#include <cstdint>
#include <iostream>
uint32_t runProgram(LPCSTR lpApplicationName) {
STARTUPINFOA si;
PROCESS_INFORMATION pi;
// Set the size of the structures
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
// Run the program
CreateProcessA(
lpApplicationName, // the path
NULL, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
CREATE_NEW_CONSOLE, // Opens file in seperate console
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi // Pointer to PROCESS_INFORMATION structure
);
uint32_t cache_size = 0;
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return cache_size;
}
int main() {
try {
const uint32_t cache_size = runProgram("CacheQuerry.exe");
std::cout << cache_size << '\n';
}
catch (const std::exception& e) {
std::cerr << e.what() << "\n\n";
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Если я создаю свое решение в режиме отладки, оба исполняемых файла находятся в одном каталоге для отладки, и если я создам свое решение в режиме выпуска, обе версии моих исполняемых файлов снова будут в одном каталоге ...
Я получаю вывод 0
в консоли, поэтому я знаю, что runProgram()
вызывается и возвращается, но я ожидаю, что будет открыта другая консоль с отображаемыми результатами из вызванной программы с ее собственным дескриптором консоли из своего собственного процесса. Однако я не вижу, чтобы его вызывали или вызывали. CacheQuerry.exe
это мой 1-й проект, и он, похоже, не выполняется ...
Я немного новичок в этой части Windows API, поэтому я не уверен, что Я делаю это правильно ... Мне нужно, чтобы мой второй проект вызвал и запустил 1-й проект ... Это первая часть моего вопроса. Как только я решу эту проблему и узнаю, что проект 2 вызывает и выполняет проект 1, я задам следующий вопрос о том, как получить значение, которое вызываемый исполняемый файл возвращает при выходе ...