Q没有管理权限的 exe 无法启动维护工具
QProcess cannot start maintenancetool from exe without administrative privileges
我从我的应用程序调用QtIFW的维护工具.exe.exe以检查如下更新:
QString command = QString( ""C:/Program Files/My Application/maintenancetool.exe" --checkupdates" );
QProcess process;
process.start( command );
process.waitForFinished();
if ( process.error() != QProcess::UnknownError )
{
return;
}
QByteArray data = process.readAllStandardOutput();
如果我运行我的应用程序,它会在执行maintenancetool.exe --checkupdates
调用时显示管理权限对话框,就像任何其他需要权限的应用程序一样,我说是接受。然后,我的应用程序挂起了一段时间,最后 process.error(( 返回QProcess::Timedout
错误。
如果我使用管理权限运行我的应用程序,一切正常。
有没有办法使用QProcess::start
从另一个不需要管理权限的 exe 中运行需要管理权限的 exe?当然,我试图避免用户每次运行myapp时都打开管理权限对话框.exe(仅在查找更新时(。
我无法使用QProcess::startDeattached
,因为我必须检索输出。
注意:如果myapp.exe和维护工具.exe没有安装在程序文件中,而是安装在任何其他常规文件夹(例如C:/myfolder(中,则一切也可以正常工作。
编辑
我发现问题是当myapp.exe调用维护工具时.exe并请求管理权限时,维护工具.exe需要很长时间才能完成(33秒(。
有趣的是,默认等待时间为30秒
bool waitForFinished(int msecs = 30000);
所以,如果我这样称呼它,它可以工作,但我必须等待 33 秒!
process.waitForFinished( 60000 );
(代表问题作者发布解决方案(。
看来Qt的维护工具.exe根本不应该要求管理员权限,这是3.0.2(我使用的版本(报告的错误,并且在3.0.4中得到了修复。
相关文章:
- 如何创建一个空的全局类并在启动时实例化它
- 如何维护资源管理器项目视图中当前可见的项目列表
- 维护unordered_map但同时每一步都需要最低的映射值
- 即使我读取了所有内容,在FIFO上打开的QSocketNotifier也会一直启动
- 使用 std::string () const 函数启动线程或未来
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- 如何创建线程序列以按照启动顺序执行任务?
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 在挂钩启动新线程时解除挂钩进程
- 程序无法启动,因为缺少 libmpc-3.dll
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- GCC,CMake,预编译标头和维护依赖项
- QSerialPort 在应用程序启动之前正在使用中
- 无法在 Arch Linux 中启动虚幻引擎 4
- C++关于指针和使用函数将它们启动到堆的行为究竟是什么?
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- 程序在使用 system() 启动另一个可执行文件时停止
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- Q没有管理权限的 exe 无法启动维护工具