Откройте приложение UWP из сервиса - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь запустить приложения и процессы, используя 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 Ответ

0 голосов
/ 08 января 2019

Вы можете сделать это с помощью метода IApplicationActivationManager :: ActivateApplication .

Его необходимо вызывать из пользовательского процесса, поэтому вам нужно будет выполнить двухэтапный подход: из вашего вызова службы CreateProcessAsUser создать вспомогательный процесс, который затем вызовет ActivateApplication.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...