如何强制我的应用程序只能打开一个exe文件? qt,linux

我希望我的应用程序只打开一个进程,即如果一个进程已经打开,并且用户想要再次打开该exe文件 – 它不会打开另一个进程。

我怎么能在Qt – Linux?

10倍!

你正在寻找的是QtSingleApplication

如果你启动另一个应用程序实例,第一个实例甚至会得到通知(你可以传递任何你想要的数据结构)。

我用它来把现有的应用程序带到前面,每当另一个实例启动。

在main.cpp中使用下面的代码来防止运行多个应用程序的实例。 我在Linux下(在QtCreator中)测试了这个代码,它的工作原理(也适用于Windows)。 我觉得这个解决方案简单易用。 该示例是用于控制台应用程序。 对于GUI应用程序,代码保持不变,检查代码中的注释。

 //main.cpp #include <QCoreApplication> //Console application //#include <QApplication> //GUI application #include <QSharedMemory> #include <QDebug> //Your QMainWindow derivated class goes here : //#include "MainWindow.h" int main(int argc, char *argv[]) { QCoreApplication app( argc, argv ); app.processEvents(); //---- Check for another instance code snippet ---- //GUID : Generated once for your application // you could get one GUID here: http://www.guidgenerator.com/online-guid-generator.aspx QSharedMemory shared("62d60669-bb94-4a94-88bb-b964890a7e04"); if( !shared.create( 512, QSharedMemory::ReadWrite) ) { // For a GUI application, replace this by : // QMessageBox msgBox; //msgBox.setText( QObject::tr("Can't start more than one instance of the application.") ); //msgBox.setIcon( QMessageBox::Critical ); //msgBox.exec(); qWarning() << "Can't start more than one instance of the application."; exit(0); } else { qDebug() << "Application started successfully."; } //---- END OF Check for another instance code snippet ---- // Only one instance is running, declare MainWindow //MainWindow myMainWindow; //myMainWindow.show(); //We enter the Qt Event loop here, we don't leave until the MainWindow is closed //or the console application is terminated. return app.exec(); } 

这可能不涉及你,但我认为这将是有益的。 我自己使用QtSingleApplication并在QtSingleApplication经历了一些奇怪的行为。 QtSingleApplication在任何情况下似乎都不起作用。 我在Windows中做了这个expierence,但根据这是一个Windows特定的错误或由QtSingleApplication的设计QtSingleApplication ,它也可能适用于Linux。

根据您开始应用程序的方式,可能有多个实例。 当我使用我的安装程序对我的应用程序进行测试时,我做了这个经验。 安装程序在完成后自动启动应用程序。 当我使用桌面链接开始我的应用程序时,我有两个实例正在运行。 所以QtSingleApplication的功能似乎取决于如何(以及由哪个用户?)应用程序启动的方式。 有关这方面的文件不清楚。 但是我认为,如果没有另外说明的话,通常人们会认为这在任何情况下都可以工作。

所以,如果您不需要QtSingleApplication添加的额外功能, QSystemSemaphoreQSharedMemory似乎是更好的方法。

您的应用程序可以检查用户主目录中的某个文件是否存在。 如果存在,则应用程序退出。 如果不在那里,应用程序创建并继续。 当然,如果用户多次启动应用程序,您可能会遇到竞争状况。 但是在大多数情况下,这个简单的解决方案应该足够了