Приложение UWP не будет запущено из Custom Shell через iApplicationActivationManager (HRESULT 0x87B20C15)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Приложение UWP не будет запущено из Custom Shell через iApplicationActivationManager (HRESULT 0x87B20C15)

Сообщение Anonymous »

Я строю пользовательскую среду оболочки (не используя назначенный доступ) для установки киосков Windows 10/11. Я заменяю explorer.exe, используя HKLM ... \ Winlogon \ Shell Key на Auto-Logon и запустите свой собственный исполняемый файл оболочки.hr = appActivationMgr->ActivateApplication(
L"Microsoft.SDKSamples.DeviceEnumeration.CS_8wekyb3d8bbwe!App",
nullptr, AO_NONE, &pid);
< /code>
Это работает отлично, когда я запускаю приложение, используемое в качестве пользовательской оболочки вручную (например, с настольных компьютеров), но сбое с 0x87b20c15 (error_package_application_blocked), когда он работает как фактическая оболочка системы. Вызов ActivateApplication. Вот моя вспомогательная функция: < /p>
bool commonHelpers::LaunchShellExperienceHost()
{
const wchar_t* shellHostPath = L"C:\\Windows\\SystemApps\\ShellExperienceHost_cw5n1h2txyewy\\ShellExperienceHost.exe";

// Check if already running
DWORD processes[1024], needed;
EnumProcesses(processes, sizeof(processes), &needed);
DWORD count = needed / sizeof(DWORD);

for (DWORD i = 0; i < count; i++) {
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processes);
if (hProcess) {
wchar_t exeName[MAX_PATH] = {};
if (GetModuleBaseNameW(hProcess, nullptr, exeName, MAX_PATH)) {
if (_wcsicmp(exeName, L"ShellExperienceHost.exe") == 0) {
CloseHandle(hProcess);
return true; // already running
}
}
CloseHandle(hProcess);
}
}

// Not running — try to start it
STARTUPINFOW si = { sizeof(si) };
PROCESS_INFORMATION pi = {};
BOOL created = CreateProcessW(shellHostPath, nullptr, nullptr, nullptr,
FALSE, CREATE_NO_WINDOW, nullptr, nullptr, &si, &pi);

if (created) {
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return true;
} else {
DWORD err = GetLastError();
MessageBoxW(nullptr, (L"CreateProcessW failed. Error: " + std::to_wstring(err)).c_str(),
L"Error", MB_OK | MB_ICONERROR);
return false;
}
}

bool commonHelpers::LaunchUwpApp(const std::wstring& aumid)
{
if (!LaunchShellExperienceHost())
{
MessageBoxW(nullptr, L"ShellExperienceHost launch failed", L"Error", MB_OK | MB_ICONERROR);
return false;
}

HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
if (FAILED(hr))
{
MessageBoxW(nullptr, L"CoInitializeEx failed", L"Error", MB_OK | MB_ICONERROR);
return false;
}

CComPtr appActivationMgr;
hr = CoCreateInstance(CLSID_ApplicationActivationManager, nullptr,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&appActivationMgr));
if (FAILED(hr))
{
CoUninitialize();
MessageBoxW(nullptr, L"Failed to create IApplicationActivationManager", L"Error", MB_OK | MB_ICONERROR);
return false;
}

DWORD pid = 0;
try
{
hr = appActivationMgr->ActivateApplication(aumid.c_str(), nullptr, AO_NONE, &pid);
}
catch (...)
{
MessageBoxW(nullptr, L"Failed to Activate application", L"Error", MB_OK | MB_ICONERROR);
}

CoUninitialize();

if (FAILED(hr))
{
wchar_t buf[256];
swprintf(buf, 256, L"Failed to launch UWP app. HRESULT: 0x%08X", hr);
MessageBoxW(nullptr, buf, L"Error", MB_OK | MB_ICONERROR);
return false;
}

return true;
}
< /code>
Несмотря на то, что CreateProcessw () возвращает успех - ActivateApplication () по -прежнему терпит неудачу с тем же hResult. Приложения UWP могут использоваться в качестве пользовательских оболочек. < /P>
💡 Примечания: < /p>


[*] Приложение UWP правильно установлено и работает вне режима киоска (тот же пользователь) < /p>
< /li>
. />
[*] Это не присваивается доступа, просто пользовательская оболочка через Winlogon \ shell

target: windows 10/11, .net/nati>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ger-hresul
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»