我正在使用Microsoft Visual Studio 2010,我正在使用C / C ++编写代码。
我有自动启动安装过程的代码。在这种情况下,安装过程需要UAC,因此我使用ShellExecuteEx()
API函数和runas
动词:
hWindow = InstallCreateWindow(NULL);
execInfo.cbSize = sizeof(execInfo);
execInfo.lpVerb = _strdup("runas");
execInfo.hwnd = hWindow;
execInfo.lpFile = szPath;
execInfo.lpParameters = szParams;
execInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
Sleep(1000);
SetActiveWindow(hWindow);
if(ShellExecuteEx(&execInfo))
return execInfo.hProcess;
if(GetLastError() == ERROR_CANCELLED)
{
// user answered NO to UAC prompt
}
InstallCreateWindow()
函数创建信息窗口,它还创建单独的窗口消息线程。窗口是可见的,最顶层,它响应消息。我必须创建它,因为我已经读过hwnd
结构中需要正确的SHELLEXECUTEINFO
参数来保持UAC提示窗口位于顶部。
但这不起作用。有时UAC窗口最大化,但主要是最小化并在任务栏中突出显示。有无法在任何情况下将UAC窗口置于顶端的方法吗?
答案 0 :(得分:1)
只需将其标记为已收回
如果调用ShellExecuteEx的程序没有前台 激活,然后UAC对话框不能激活,所以它必须 等到使用激活它。 Raymond Chen