AppLocker блокирует ShellExecute без сообщения об ошибке - PullRequest
0 голосов
/ 15 мая 2019

У нас есть приложение, которое использует внутренний механизм обновления, загрузив нашу последнюю версию setup.exe в %TEMP% и выполнив ее позже.Мы используем эту функцию ShellExecuteW:

ShellExecuteW(NULL, "open", filePath, parameters, NULL, SW_SHOWNORMAL);

При использовании этой команды на компьютере без настроенного AppLocker и без прав администратора будет выполняться setup.exeкак положено.

При следующих настройках в AppLocker и попытке сделать то же самое при работе без прав администратора AppLocker блокирует setup.exe, что нормально.Проблема в том, что ничего не происходит - он не отображает диалоговое окно и не предоставляет никакой информации для пользователя, даже несмотря на то, что средство просмотра событий показывает, что приложение не запущено.

Исполняемый файл AppLockerПравила

Просмотр событий AppLocker

Как мне добиться, чтобы хотя бы появилось сообщение об ошибке?Можно ли даже запустить setup.exe напрямую от имени администратора, чтобы вместо этого появлялось приглашение UAC? ​​

1 Ответ

0 голосов
/ 20 мая 2019

Я пришел к выводу, что ShellExecute () на самом деле не работает надежно, когда в системе используется AppLocker.В одном случае это вернуло бы значение 42, которое указывало бы на успешное выполнение setup.exe, и в журнале говорилось, что запуск не был предотвращен, но все же setup.exe не открывался.В другом случае это будет предотвращено, но вернется значение 42.

Поэтому я переключился на CreateProcess (), потому что он всегда надежно возвращает false, если каким-то образом выполнение setup.exe не работает и всегда trueесли он работает.Вот мой код:

STARTUPINFO info={sizeof(info)};
PROCESS_INFORMATION processInfo;

if (CreateProcessW(NULL, "filepath + /paremeters", NULL, NULL, true, CREATE_NEW_CONSOLE, NULL, NULL, &info, &processInfo)) {
    //Do something
    CloseHandle(processInfo.hProcess);
    CloseHandle(processInfo.hThread);
} else {
    //Do something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...