c – 如何检测是否UAC取消了是否通过ShellExecuteEx启动
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 如何检测是否UAC取消了是否通过ShellExecuteEx启动,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含952字,纯文字阅读大概需要2分钟。
内容图文
我通过ShellExecuteEx启动exe:
tstring sPath = _T("C:\\Test\\MyApp.exe");
tstring sArgs = _T("/S");
SHELLEXECUTEINFO lpExecInfo = {0,};
lpExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
lpExecInfo.lpFile = sPath.c_str();
lpExecInfo.fMask=SEE_MASK_NOASYNC ;
lpExecInfo.hwnd = NULL;
lpExecInfo.lpVerb = NULL;
lpExecInfo.lpParameters = sArgs.c_str();
lpExecInfo.lpDirectory = NULL;
lpExecInfo.nShow = SW_SHOWNORMAL;
if (!ShellExecuteEx(&lpExecInfo)) {
// handle the error
throw CException("Cannot launch an application");
}
int nRes = (int)lpExecInfo.hInstApp; // nRes = 42
DWORD dwErr = GetLastError(); // dwErr = 0
如何检测UAC是否取消了启动?在这种情况下,ShellExecuteEx成功(hInstApp = 42,GetLastError返回0).
谢谢
解决方法:
如果ShellExecuteEx()没有返回错误,那么您无法检测到ShellExecuteEx控件之外发生的UAC取消.
你应该做的是使用CreateProcess()代替.如果UAC重新审视新进程,那将返回错误.除非使用“runas”动词强制执行UAC提示,否则不要使用ShellExecuteEx()来启动.exe文件.
内容总结
以上是互联网集市为您收集整理的c – 如何检测是否UAC取消了是否通过ShellExecuteEx启动全部内容,希望文章能够帮你解决c – 如何检测是否UAC取消了是否通过ShellExecuteEx启动所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。