启动时暂停Windows 10 Store App

时间:2016-02-24 20:16:41

标签: c++ debugging windows-store-apps windows-10-universal

我正在编写一个C ++工具来帮助调试和测试已部署的Windows 10商店应用程序。我遇到的一个问题是我需要一种方法来启动暂停状态的Store App,这样我就可以在应用初始化之前附加调试器。我知道做这样的事情的常用方法是在父进程中设置进程创建的挂钩,并强制标记创建的进程以挂起状态启动;但是,对于Store Apps,创建实际应用程序进程的父进程是svchost.exe,它在系统级别运行,如果没有某种内核模式驱动程序,则无法挂钩。

我使用IApplicationActivationManager界面启动应用程序,并在启动后使用IPackageDebugSettings界面控制/调试它们。有没有办法在启动时暂停Windows 10 Store应用程序,以便不允许首次初始化?

2 个答案:

答案 0 :(得分:1)

回想起来,我几乎在问题本身内回答了我自己的问题。要以挂起状态启动Windows 10 Store应用程序,请使用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商店应用程序的实用程序函数,以使整个过程更容易。

答案 1 :(得分:0)

在Visual Studio中,转到项目的属性。然后进入Debug选项卡并选择'不启动,但在启动时调试我的代码'。

这是你要找的吗?