从服务中打开 UWP 应用程序

Posted

技术标签:

【中文标题】从服务中打开 UWP 应用程序【英文标题】:Open UWP application from service 【发布时间】:2019-01-08 07:51:53 【问题描述】:

我正在尝试使用我创建的服务中的CreateProcessAsUser 启动应用程序和进程。我尝试打开记事本、IE 等应用程序是成功的。但是在尝试打开 Groove Music 时遇到了障碍,这是一个 UWP 应用程序。

当我尝试从命令提示符打开 Groove Music 时,文件夹被隐藏并且访问被拒绝。

STARTUPINFO si;
PROCESS_INFORMATION pi;
LPTSTR szCmdline = _tcsdup(TEXT("C:\Program Files\WindowsApps\Microsoft.ZuneMusic_10.18102.10531.0_x64__8wekyb3d8bbwe\Music.UI.exe"));
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
HANDLE t1,t2;
OpenProcessToken(gethandle(_T("explorer.exe")), TOKEN_DUPLICATE | TOKEN_QUERY | TOKEN_ASSIGN_PRIMARY | TOKEN_ADJUST_PRIVILEGES , &t2);
DuplicateTokenEx(t2, 0, NULL, SecurityImpersonation,TokenPrimary, &t1);
CreateProcessAsUser(t1,NULL,szCmdline,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi)) 

有什么方法可以从我编写的程序中启动 UWP 应用程序?还是我缺少任何明显的方法?

【问题讨论】:

【参考方案1】:

您可以使用IApplicationActivationManager::ActivateApplication 方法来做到这一点。

它需要从用户进程中调用,因此您必须执行两步方法:从您的服务调用 CreateProcessAsUser 创建一个助手进程,然后该进程将调用 ActivateApplication。

【讨论】:

嗨 Stefan,CreateProcessAsUser 要创建哪种进程?那么新进程如何调用ActivateApplication呢?

以上是关于从服务中打开 UWP 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在UWP中以编程方式在设置中打开位置服务?

UWP:BackgroundTask 打开应用主页

在 UWP 应用中创建使用调试 App Service (应用服务)

从api获取图像作为字符串?到 UWP 应用程序

如何在 UWP 的应用中打开另一个应用

从 UWP 应用程序看不到 localhost