当前位置: 首页 > 知识库问答 >
问题:

Qt关闭()无法在部署的应用程序上工作

蒋骏
2023-03-14

我制作了一个程序,可以在设定时间后关闭PC。用户使用2个旋转框(一个用于小时,另一个用于分钟)输入时间,然后我将其转换为毫秒:

ms = (ui->hBox->text().toInt() * 3600 + ui->mBox->text().toInt() * 60) * 1000;

然后它调用timer()函数

void Dialog::timer()
{
    QTimer *time = new QTimer(this);
    time->setInterval(ms);
    time->setSingleShot(1);
    connect(time, SIGNAL(timeout()), this, SLOT(shutdown()));
    time->start();
}

然后signal timeout()调用shutdown()插槽/函数,检查用户是否要关闭、重新启动或注销电脑,然后执行相应的命令。

void Dialog::shutdown()
{
    if(ui->radioButton->isChecked())
        system("shutdown -s -t 0");
    else if(ui->radioButton_2->isChecked())
        system("shutdown -r -t 0");
    else if(ui->radioButton_3->isChecked())
        system("shutdown -l -t 0");
}

(还尝试了“shutdown-s-f”,甚至只尝试了“shutdown-s”,似乎没有什么能帮助解决问题)

我想只在我的Windows PC上运行这个应用程序,所以使用system()也没有问题。

当我从Qt Creator运行上面的应用程序时,它可以完美地执行,但当我部署它时,会放入所有需要的内容。dll文件,程序等待计时器,然后只打开空的控制台,然后启动新的程序实例,PC永远不会关闭或重新启动。那么我做错了什么?我错过了一些吗。dll文件还是什么?

共有2个答案

洪宇定
2023-03-14

使用system()是不安全的。解决问题的更好方法是使用Win32 API调用ExitWindowEx()。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa376868(v=vs.85)。aspx

当然,因为这只是windows,所以您必须为windows平台定义它。

#ifdef Q_OS_WIN
#include "qt_windows.h"
if ( !ExitWindowsEx(EWX_SHUTDOWN,0)) // Or EWX_FORCE
{
  // Failed, call GetLastError() to know why
}
#endif

编辑:您还需要正确的权限:

如何通过windows API关闭电脑?

顾文昌
2023-03-14

一个简单的解决方法是将您部署的exe重命名为:shut.exe或任何东西而不是shutdown.exe,然后系统将执行它的关闭命令,而不是再次执行您的应用程序。

乐:也许还有其他方法可以解决这个问题,但我还没有调查过。。。因此,也要密切关注其他解决方案;)

 类似资料:
  • 我无法在Tomcat 6上部署Grails 2.2.4应用程序。我尝试了新安装的tomcat,甚至我的应用程序的旧版本(以前运行过)。 此异常在一分钟后引发。在tomcat启动后: 我真的不知道从哪里开始修理它-/

  • 我试图将spring boot应用程序部署到外部tomcat,在catalina.log文件中出现如下异常。 war文件名为:com#myapp.war。

  • 我对角和Spring非常陌生。我可能犯了一些愚蠢的错误。我有Angular Spring应用程序,它会显示登录屏幕,然后显示菜单。这在未部署时(即Angular时)可以完美运行 ng build—base href=/ 我的pom。xml 我的应用程序。单元输电系统

  • 我最近创建了我的GitHub.io存储库,以部署我以前在我的个人电脑上运行的已完成的应用程序。下面是我的应用程序的结构- 页面希望读取index.html文件,但我希望它首先读取app.js,然后从app.js自动生成流。 如何让GitHub.io读取我的app.js文件?

  • 我正在将我的第一个应用程序(Flask)部署到EB,遇到了一个障碍。使用PostgreSQL需要安装psycopg2,但我不知道如何让它运行。 我在这篇文章(Amazon Elastic Beanstalk上的Psycopg2)和这篇文章中都看到了(https://realpython.com/blog/python/deploying-a-django-app-to-aws-elastic-be

  • 我是云提供商的初学者,我有一个网站要部署。该网站使用PHP、HTML、CSS和Javascript创建,并使用在NodeJS上开发的API访问数据库。 有没有办法在一个AWS弹性豆茎应用程序上部署所有这些(Inteface+NodeJS API)?或者我应该只在AWS Elastic Beanstalk上部署API,而将网站的界面与其他AWS解决方案一起部署,例如Amazon S3上的静态网站。