Я пишу инструмент на C ++ для отладки и тестирования развернутых приложений Магазина Windows 10. Одна из проблем, с которыми я столкнулся, заключается в том, что мне нужен способ запуска приложения Store в приостановленном состоянии, чтобы я мог подключить отладчик до его инициализации. Обычный способ, которым я знаю, чтобы сделать что-то подобное, это установить хук на создание процесса в родительском процессе и принудительно пометить созданный процесс для запуска в приостановленном состоянии; однако для Магазина приложений родительский процесс, который создает настоящий процесс приложения, — это svchost.exe, который выполняется на системном уровне и не может быть перехвачен без какого-либо драйвера режима ядра.
Я использую IApplicationActivationManager
интерфейс для запуска приложений, и я использую IPackageDebugSettings
интерфейс для управления / отладки их после запуска. Есть ли способ приостановить приложение Магазина Windows 10 при его запуске, чтобы не было разрешено выполнить первоначальную инициализацию?
Оглядываясь назад, я почти ответил на свой вопрос в самом вопросе. Чтобы запустить приложение Магазина Windows 10 в приостановленном состоянии, используйте IPackageDebugSettings::EnableDebugging
метод для установки исполняемого файла в качестве отладчика. Отлаживаемое приложение запустится автоматически; ответственность за возобновление приложения лежит на отладчике.
То, что я закончил в моем проекте, похоже на это:
// Gets the current application's UserModelId and PackageId from the registry
std::wstring appName = AppUtils::GetApplicationUserModelId();
std::wstring appFullName = AppUtils::GetApplicationPackageId();
HRESULT hResult = S_OK;
// Create a new instance of IPackageDebugSettings
ATL::CComQIPtr<IPackageDebugSettings> debugSettings;
hResult = debugSettings.CoCreateInstance(CLSID_PackageDebugSettings, NULL, CLSCTX_ALL);
if(hResult != S_OK) return hResult;
// Enable debugging and use a custom debugger
hResult = debugSettings->EnableDebugging(appFullName.c_str(), pathToDebugger.c_str(), NULL);
if(hResult != S_OK) return hResult;
// Launch the application
DWORD dwProcessId = 0;
hResult = AppUtils::LaunchApplication(appName, &dwProcessId);
if(hResult != S_OK) return hResult;
/* Do more stuff after the app has been resumed by the debugger */
// Stop debugging the application so it can run as normal
hResult = debugSettings->DisableDebugging(appFullName.c_str());
if(hResult != S_OK) return hResult;
Я написал простую обертку для IPackageDebugSettings
а также несколько служебных функций для работы с приложениями Магазина Windows 10 для упрощения всего процесса.
В Visual Studio перейдите в свойства вашего проекта. Затем перейдите на вкладку «Отладка» и выберите «Не запускать, а отлаживать мой код при запуске».
Это то, что вы ищете?