AppLocker阻止ShellExecute而不给出错误消息

时间:2019-05-15 09:06:58

标签: shellexecute applocker

我们有一个应用程序使用内部更新机制,方法是将最新的setup.exe下载到%TEMP%并随后执行。我们使用以下ShellExecuteW函数:

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

在未配置AppLocker且没有管理员权限的计算机上使用此命令时,setup.exe将按预期执行。

在AppLocker中具有以下设置,并且在没有管理员权限的情况下尝试执行相同的设置时,AppLocker会阻止setup.exe,这很好。问题是什么也没发生-它不会显示对话框,并且即使事件查看器显示应用程序被阻止运行,对于用户也没有任何信息。

AppLocker executable Rules

Event Viewer AppLocker

如何实现至少出现错误消息?甚至可以直接以管理员身份启动setup.exe,以便出现UAC提示吗?

1 个答案:

答案 0 :(得分:0)

我得出的结论是,当在系统上使用AppLocker时,ShellExecute()的行为实际上并不可靠。在一种情况下,它将返回值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
}
相关问题