导航:首页 > 软件知识 > 如何应用程序单实例运行

如何应用程序单实例运行

发布时间:2022-11-28 03:13:02

1. 易语言单一实例如何使用(用于只允许运行一个程序)

设置一个全局信号量,字串取长一些,
程序开头就用这个,,-如果能设置成功,表明当前只有一个实例,不成功表示程序运行过,当前实例结束

2. 怎样让Android应用程序只运行一个实例

这个倒是没听说过
给你列出Activity的四种启动模式吧:

1. standard
模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。
2. singleTop
如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
3. singleTask
如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
4. singleInstance
在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

另外:

设置Activity的启动模式,要在AndroidManifest.xml里对应的标签设置android:launchMode属性
android:name=".MyActivity"
android:launchMode="standard" />

3. 如何用Qt写一个同一时间只能运行一个实例的应用程序

为了使一个应用程序在同一时间只运行一个实例,需要用某种方法在程序启动时,检测是否已有正在运行的实例,如果有,则将本次启动的参数传递给前一个实例(例如需要打开的文档的路径),如果没有,则正常启动。
实现的方法有多种:
1. 用Windows API创建一个互斥量:
#include <windows.h>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

HANDLE hMutex = CreateMutex(NULL, TRUE, L"YourApp"); // 创建一个互斥量来保证只运行一个实例
if(hMutex != NULL)
{
if(GetLastError() == ERROR_ALREADY_EXISTS)
{

QMessageBox::critical(qApp->activeWindow(),
QObject::tr("An instance of this application has been run!"),
QObject::tr("Only one instance can be run at a time!"));
return 1;
}
}

... // 以下是正常启动代码
}
注:如果保险起见,CreateMutex()中的字符串应该用一个GUID来保证其唯一性,Visual Studio中有一个生成GUID的工具,菜单“工具”->“创建GUID”,选择合适的定义形式,创建并拷贝到剪贴板即可。

此方法的缺点:1.使用了Windows API,不能跨平台;2.不能自动激活前一个实例的窗口。
2. 每次启动时用Windows API枚举进程,同时在第一次运行时用SetProp()函数给当前窗口设置属性,这样下次启动时,在枚举的进程中查找具有这个属性的窗口,若找到,说明已有实例在运行,将该实例的窗口激活;若未找到则正常启动。
此方法客服了前一方法的第2个缺点,但过于依赖Windows API函数(似乎还是MFC函数,对Qt程序好像不可行)。有兴趣的可以照这个链接里的代码试试
3. 利用QLocalSocket和QLocalServer,基本的思路是:

用程序启动时首先尝试去连接一个QLocalServer,如果连接失败,说明自己是第一个实例,于是创建这么一个QLocalServer,否则将启动
参数发送给QLocalServer然后退出。第一个实例的QLocalServer在收到后面启动的实例发来的参数时可以进行处理(例如激活第一个实例
的窗口)。这个链接里有详细的示例代码供参考。
注:使用QLocalSocket和QLocalServer时,需要把QtNetwork库包含在项目文件中;
4. 用Qt Solutions里提供的QtSingleApplication类(最简单的方法,推荐)
从ftp://ftp.qt.nokia.com/qt/solutions/lgpl/

下载QtSingleApplication的源码包,解压缩后按照INSTALL.TXT里的说明进行配置和编译,我选择编译成动态库,这样下次再用,
只需引用头文件和lib文件即可,比较方便。
用法很简单,只需把原来main()里的QApplication对象换成QtSingleApplication对象,调用一下isRunning()方法进行判断即可。
// 原来的代码
int main(int argc, char **argv)
{
QApplication app(argc, argv);

MyMainWidget mmw;

mmw.show();
return app.exec();
}

// 修改后的代码
int main(int argc, char **argv)
{
QtSingleApplication app(argc, argv);

if (app.isRunning())
return 0;

MyMainWidget mmw;
mmw.show();
return app.exec();
}
注1:QtSingleApplication的实现方法基本上也是利用QLocalServer和QLocalSocket,所以同样依赖于QtNetwork库;
注2:以上代码只展示了QtSingleApplication最简单的用法,这个类还有更多用法,请参考源码包中带的范例和文档。
QtSingleApplication的几种用法(直接使用源码,编译成动态库等)可以参考这个链接:Qt程序只运行一个实例

4. VC中只允许一个程序实例运行的几种简单实现方式 详细�0�3

在许多的应用程序中,有时候只能允许一个程序实例运行,当发现一个程序
实例已经运行给出提示或者激活前面运行的实例,下面针对以上情况,给出
几种简单实现方式。
// 方法一:API
if ( ::FindWindow(NULL,”您主窗口的标题”) ){::MessageBox(NULL,"程序已经运行!",
g_strTitleText,MB_OK | MB_ICONEXCLAMATION);
return FALSE;}
// 方法二:互斥对象
HANDLE handle = NULL;
CString strtemp = _T("");
strtemp += g_strTitleText;// g_strTitleText 窗口的标题
strtemp += _T("_HOMIVIS");// 再加一些自己的信息以免冲突,这样更加安全
handle = CreateMutex(NULL,TRUE,(LPCSTR)strtemp);
if (handle != NULL){if (::GetLastError() == ERROR_ALREADY_EXISTS ){::MessageBox(NULL,"程序已经运行!",g_strTitleText,
MB_OK | MB_ICONEXCLAMATION);
return FALSE;}}
其实方法还有很多,以上两种是比较简单的,只是起到抛砖引玉的作用。在VC++ 中实现如下:

5. linux桌面应用怎么启动单实例

本文主要讲述的是linux中如何给应用程序创建一个快速启动图标,话不多说,我们来看实际的操作步骤:
本文的实例是给celipse创建一个启动图标
1、我们需要通过下列命令,来创建一个启动的脚本:
gedit /usr/share/applications/eclipse.desktop

2、将下列内容复制到文件中
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=/usr/local/android/eclipse/eclipse
Icon=/usr/local/android/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
说明部分:
Exec :这个是应用程序可执行文件的目录
Icon :这个是图标的目录
3、然后在applications -> programming 菜单中就可以找到你所创建的图标了,然后再右键创建一个桌面图标即可

6. 应用程序只运行一个实例怎么简单设置,比如火狐不借助扩展实现单实例运行,怎么设置

您好,感谢您对火狐的支持

因为火狐浏览器本身没有限定进程数的功能,因此目前暂时也没有办法锁定系统中只有一个火狐浏览器实例存在,请知晓!
您可以在火狐官方网站下载火狐浏览器,在火狐社区了解更多内容。希望我的回答对您有所帮助,如有疑问,欢迎继续在本平台咨询。

7. 运行一个应用程序的操作方法有哪几种

1.双击快捷方式图标(快捷方式图标可能在桌面、开始菜单栏、快速启动栏或其它文件夹中)。
2.找到启动程序所在的文件夹,双击启动图标。
3.在开始菜单中找开运行,对话框中输入启动程序完整的路径及文件名。
4.在开始--程序--启动中加入程序,可以在开机时自动运行。
5.打开开始--程序--附件--命令提示符,在提示符后输入运行文件名回车即可运行。

8. C/C++中 如何只允许运行一个程序实例多列一些方法。

一般来说的办法就是怎么想让第二次运行知道已经有程序在运行了,或者说怎么能通知第二个程序已经有文件在运行了

例如程序运行后如果程序运行目录没有文件a.txt,就在程序运行目录新建一个文件a.txt,关闭的时候删除,这样第二次运行发现已存在了这个文件,说明程序已经在运行,故第二次运行直接退出

例如第一个运行程序用系统函数在本地监听一个socket端口,第二次运行程序发现这个端口已经被占用或者能连接,就知道已经有程序在运行了(例如smplayer就这样搞的)

例如第一个运行的程序在注册表某个地方写入一个1,退出时写入0,第二次运行的程序发现注册表这个地方是1就退出,如果是0就可以继续运行了,也就是其实是第一次运行

反正无论什么办法,具体要看你觉得怎么样合适才行的呢。还可以去找系统的进程列表,还可以测试某些环境变量啊,反正方法是很多的是死的,人是活的。

9. C# WinForm 程序如何只允许运行一个实例

C#禁止应用程序同时运行的方法
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace SingleProcessStart
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
//
//使用STAThread属性将程序的默认线程模型指定为单线程模型。
//注意,线程模型只影响使用COM interop的应用程序,将这个属性应用于不使用COM interop的程序将不会产生任何效果。
[STAThread]
//[MTAThreadAttribute]
static void Main()
{
////原始
//Application.EnableVisualStyles();
//Application.(false);
//Application.Run(new Form1());

//方法一,使用线程互斥
//bool createdNew = false;
//System.Threading.Mutex mutex = new System.Threading.Mutex(true, "OnlyOnceTime", out createdNew);
//if (createdNew)
//{
// Application.EnableVisualStyles();
// Application.(false);
// Application.Run(new Form1());
//}
//else
//{
// MessageBox.Show("程序已经运行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
//}

//方法二,使用API实现
/*
* 关于方法二的调试,需要注意的是要将项目--属性--调试,选择启用外部程序,选择到你的EXE文件,然后先开启你的EXE文件
* 否则在调试时.NET默认会使用vshost.exe的宿主进程(宿主进程随.NET启动而启动),而此宿主进程在外部无法启用,因此永远是唯一的
*/
System.Diagnostics.Process p = GetRunningInstance();
if (p != null) //已经有应用程序副本执行
{
HandleRunningInstance(p);
}
else //启动第一个应用程序
{
Application.EnableVisualStyles();
Application.(false);
Application.Run(new Form1());
}
}

//以下为方法二调用API代码
private const int WS_HIDE = 0;//窗口隐藏
private const int WS_SHOWNORMAL = 1;//窗口处于正常状态
private const int WS_SHOWMIN = 2;//窗口处于最小化状态
private const int WS_SHOWMAX = 3;//窗口处于最大化状态

/// <summary>
/// 显示窗口
/// </summary>
/// <param name="hWnd">句柄</param>
/// <param name="cmdShow">显示模式</param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);

[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);

/// <summary>
/// 查找窗口的句柄
/// </summary>
/// <param name="className">指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,表示接收任何类</param>
/// <param name="titleName">指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;或设为零,表示接收任何窗口标题</param>
/// <returns>句柄</returns>
[System.Runtime.InteropServices.DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern int FindWindow(string className, string titleName);

/// <summary>
/// 获取应用程序进程实例,如果没有匹配进程,返回Null
/// </summary>
/// <returns>返回当前Process实例</returns>
public static System.Diagnostics.Process GetRunningInstance()
{
//获取当前进程
System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();

//获取当前运行程序完全限定名
string currentFileName = currentProcess.MainMole.FileName;

//获取进程名为ProcessName的Process数组。
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName(currentProcess.ProcessName);

//遍历有相同进程名称正在运行的进程
foreach (System.Diagnostics.Process process in processes)
{
if (process.MainMole.FileName == currentFileName)
{
if (process.Id != currentProcess.Id)//根据进程ID排除当前进程
return process;//返回已运行的进程实例
}
}
return null;
}

/// <summary>
/// 获取应用程序句柄,设置应用程序前台运行,并返回bool值
/// </summary>
public static bool HandleRunningInstance(System.Diagnostics.Process instance)
{
IntPtr intPtr = new IntPtr(instance.MainWindowHandle.ToInt32() == 0 ?
FindWindow(null, "Form1") : instance.MainWindowHandle.ToInt32());

//使窗口最大化
ShowWindowAsync(intPtr, WS_SHOWMAX);

//设置前台进程为已运行的进程,而现有进程继续执行至进程结束(在这里跑完MAIN函数就结束掉了)
return SetForegroundWindow(instance.MainWindowHandle);
}

/// <summary>
/// 获取窗口句柄,设置应用程序前台运行,并返回bool值,重载方法
/// </summary>
/// <returns></returns>
public static bool HandleRunningInstance()
{
System.Diagnostics.Process p = GetRunningInstance();
if (p != null)
{
HandleRunningInstance(p);
return true;
}
return false;
}
}
}

10. 如何启动、运行、打开一个应用程序

在电脑中所有的工作都是由一个个程序来完成的,不同的工作由不同的程序或软件来完成;

Windows是一个窗口操作系统,运行一个程序就会打开一个相应的窗口,各项工作将会在这个窗口中进行,如何打开或者运行一个程序呢?

1、找到所要运行的应用程序,可以根据名称(名字),或者图标来找;

1)在桌面上的图标里寻找,许多的程序安装以后会将运行自己的快捷方式,放到桌面上,快捷方式是一个带箭头的小图标,双击这个图标就会打开它所对应的程序;

2)在“开始”菜单中寻找,单击任务栏左边的“开始”按钮,就会弹出一个菜单,里面有一项“所有程序”,

鼠标移过去,会变蓝同时出现下一级菜单,顺着蓝色平平的移过去就进入到程序菜单,里面有许多的菜单项,每一项就代表一个应用程序,单击一个菜单项,就会启动相应的程序;

3)开始菜单中有许多项目,查找时注意名称的意思以及图标,并且单击就可以运行,一般彩色的图标代表了运行应用程序,而一个卸载的图标则是删除应用程序(千万别乱点);

4)在文件夹中寻找,用户的文件一般放在“我的文档”文件夹中,也可以在“我最近的文档”中寻找;

5)如果找不着自己的文件,可以使用开始菜单中的“搜索”命令,按提示一步一步操作就可以了;

2、常用程序的位置

1)“我的电脑”、“我的文档”、“回收站”、上网的IE浏览器、“网上邻居”在桌面上,双击就可以运行;

2)大多数应用程序都在开始菜单的所有程序里头,有一个菜单选项,找彩色图标点击;

3)“记事本”、“画图”和“写字板”都在“开始”菜单的“所有程序”的“附件”里,注意移动鼠标时看着蓝色,平平地移动,别乱点;

3、练习

1)最小化所有窗口,数一下桌面有多少个图标,有多少是带箭头的快捷方式;

2)在桌面上找一个快捷方式,双击运行这个程序,成功后在关闭它,再试一个;

3)在开始菜单中找到“记事本”程序项,单击运行,成功后关闭它,如果出现是否保存的提示,选“否”,同样再运行“画图”;

4)在“附件”中打开再关闭写字板、计算器;

5)在“开始”菜单中单击“搜索”,看一下界面;

本节学习了如何启动、运行、打开一个应用程序,想了解更多相关信息,请继续关注本栏目。

阅读全文

与如何应用程序单实例运行相关的资料

热点内容
如何关闭小乔信息 浏览:372
市场mcc是什么 浏览:974
怎么做虚拟产品代理 浏览:422
信息化环境如何提高学生朗读能力 浏览:383
智慧团建如何一键完善团干部信息 浏览:761
越狱苹果x怎么删除后台程序 浏览:751
情感倾诉的小程序多少钱 浏览:958
程序员新电脑怎么设置 浏览:980
高铁如何查询上车信息 浏览:222
佰花淡斑产品有哪些 浏览:184
如何巧用信息技术进行健康教育 浏览:998
p图怎么把产品p破损 浏览:701
养殖农产品如何销售 浏览:533
男生学什么技术最有前途 浏览:383
陵城区房地产市场监管什么职位 浏览:624
信息号码前面106的哪个是中行 浏览:743
一个亿数据表如何优化 浏览:657
代理宝宝奶粉怎么样 浏览:661
泰山银行理财产品有哪些 浏览:561
机关代理什么意思 浏览:261