启动时暂停 Windows 10 应用商店应用

Posted

技术标签:

【中文标题】启动时暂停 Windows 10 应用商店应用【英文标题】:Suspend Windows 10 Store App on launch 【发布时间】:2016-02-24 20:16:40 【问题描述】:

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

我正在使用IApplicationActivationManager 接口来启动应用程序,并在启动后使用IPackageDebugSettings 接口来控制/调试它们。有没有一种方法可以在 Windows 10 应用商店应用启动时暂停它,从而不允许它先初始化?

【问题讨论】:

您不能在继续初始化之前要求用户提示以确认调试器已附加吗?只要它不是公开发布的一部分,我认为这样做没有问题。 【参考方案1】:

回想起来,我几乎在问题本身中回答了我自己的问题。要以挂起状态启动 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 应用商店应用的实用程序函数,以简化整个过程。

【讨论】:

【参考方案2】:

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

这就是你要找的吗?

【讨论】:

不完全是。应用程序本身已经编译和部署,我正在编写的工具将启动应用程序并在应用程序初始化之前将自定义编写的调试器作为 DLL 注入。 您能分享一下所包含内容的详细信息吗?在 CLSID_PackageDebugSettings 上使用标识符 SHGDNF 挖掘 barfs,并且没有 GUID 与此对象关联。我会输入完整的错误,但显然没有办法用空格格式化 cmets...

以上是关于启动时暂停 Windows 10 应用商店应用的主要内容,如果未能解决你的问题,请参考以下文章

Windows 10 崩溃查询

怎样禁止win10应用商店安装软件

win10应用商店不能登录和下载 提示:发生了错误 服务尚未启动 如下图所示,求解

从桌面运行 Windows 应用商店应用程序

Windows 8 运行时(WinRT/Windows 应用商店应用程序/Windows 10 通用应用程序)与 Silverlight 和 WPF 相比如何? [关闭]

Win10应用商店提示“错误 0x800706d9”怎么办