我正在编写一个C ++工具来帮助调试和测试已部署的Windows 10商店应用程序。我遇到的一个问题是我需要一种方法来启动暂停状态的Store App,这样我就可以在应用初始化之前附加调试器。我知道做这样的事情的常用方法是在父进程中设置进程创建的挂钩,并强制标记创建的进程以挂起状态启动;但是,对于Store Apps,创建实际应用程序进程的父进程是svchost.exe,它在系统级别运行,如果没有某种内核模式驱动程序,则无法挂钩。
我使用IApplicationActivationManager
界面启动应用程序,并在启动后使用IPackageDebugSettings
界面控制/调试它们。有没有办法在启动时暂停Windows 10 Store应用程序,以便不允许首次初始化?
答案 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选项卡并选择'不启动,但在启动时调试我的代码'。
这是你要找的吗?