如何使应用程式只执行一个例项 VC

如题所述

第1个回答  2022-10-13

如何使应用程式只执行一个例项 VC

关键字:VC如何使应用程式只执行一个例项,VC 只执行一次,只给一个程式执行
在开发网路应用程式的时候,由于埠分配和占用问题,经常出现某程式只给执行一个例项的情况.下面就介绍一下,如何使程式就只执行一个例项.
方法一:在应用程式类中使用互斥量
实现步骤:
1.用GUIDGEN.EXE产生一个全域性标志,#define PROC_ID "产生的全域性标志"
如本例项:#define PROC_ID "0xa9a66d98, 0x18c7, 0x447b, 0x80, 0xc, 0xa3, 0x20, 0xea, 0x4f, 0xb6, 0xe8" 注:GUIDGEN.EXE为VC自带工具,如果在开始->程式的Microsoft Visual C++ 6.0 Tools里找不到该程式可以到C:\Program Files\Microsoft Visual Studio\Common\Tools里找到.
注:用此方法生成的串,只为保证该程序标识的唯一性,也可以自己定一个简单的串标识
2.
BOOL CEx1App::InitInstance()
{
handle=::CreateMutex(NULL,FALSE,PROC_ID);handle为宣告的HANDLE型别的全域性变数
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
AfxMessageBox("应用程式已经在执行");
return FALSE;
}
......................略
}
3.
在XXApp类里右件,新增ExitInstance虚拟函式:(函式里语句如下即可)
int CEx1App::ExitInstance()
{
CloseHandle(handle);
return CWinApp::ExitInstance();
}
/缺点:无法击活旧视窗
方法二:列举程序法
#define ID_GUI "0xa9a66d98, 0x18c7, 0x447b, 0x80, 0xc, 0xa3, 0x20, 0xea, 0x4f, 0xb6, 0xe8"Guidgen.exe生成保证唯一性
新增的标识只执行一次的属性名
CString g_szPropName = ID_GUI;?? 全域性变数
HANDLE g_hValue = (HANDLE)1; 全域性变数
新增一个列举视窗的函式
BOOL CALLBACK EnumWndProc(HWND hwnd,LPARAM lParam)
{
HANDLE h = GetProp(hwnd,g_szPropName);
if( h == g_hValue)
{
?? *(HWND*)lParam = hwnd;
?? return false;
}
return true;
}
BOOL CRunOnceApp::InitInstance()
{
?? 查询是否有本程式的前一个例项执行
HWND oldHWnd = NULL;
EnumWindows(EnumWndProc,(LPARAM)&oldHWnd); 列举所有执行的视窗
if(oldHWnd != NULL)
{
?? AfxMessageBox("本程式已经在运行了");
?? ::ShowWindow(oldHWnd,SW_SHOWNORMAL);??? 启用找到的前一个程式
?? ::SetForegroundWindow(oldHWnd);?? 把它设为前景视窗
?? return false;??????? 退出本次执行
}
................略
}
在XXDlg.cpp页
宣告全域性变数
extern CString g_szPropName;
extern HANDLE g_hValue;
在主视窗的 OnInitDialog()中新增属性
设定视窗属性
SetProp(m_hWnd,g_szPropName,g_hValue);
方法二优点:可以启用旧程序视窗

VB如何使程式只执行一个例项

设定程式启动项为sub main函式,建一个模组,里面写好main函式,如下:
Sub Main()
If App.PrevInstance = True Then
Call MsgBox("程式已经在执行", vbCritical)
End
End If
end sub
或者更简单点,在你启动时呼叫的窗体的form_load事件里最前面,加上If App.PrevInstance = True Then END就行

怎样让Android应用程式只执行一个例项?

这个倒是没听说过
给你列出Activity的四种启动模式吧:
1. standard
模式启动模式,每次启用Activity时都会建立Activity,并放入任务栈中。
2. singleTop
如果在任务的栈顶正好存在该Activity的例项, 就重用该例项,否者就会建立新的例项并放入栈顶(即使栈中已经存在该Activity例项,只要不在栈顶,都会建立例项)。
3. singleTask
如果在栈中已经有该Activity的例项,就重用该例项(会呼叫例项的onNewIntent())。重用时,会让该例项回到栈顶,因此在它上面的例项将会被移除栈。如果栈中不存在该例项,将会建立新的例项放入栈中。
4. singleInstance
在一个新栈中建立该Activity例项,并让多个应用共享改栈中的该Activity例项。一旦改模式的Activity的例项存在于某个栈中,任何应用再启用改Activity时都会重用该栈中的例项,其效果相当于多个应用程式共享一个应用,不管谁启用该Activity都会进入同一个应用中。
另外:

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

您好,我来为您解答:
在程式启动前扫描一下程序列表,如果有同名的程序在执行,则不启动程式。
在你的androidMainfest.xml档案中,
单例的activity配置中新增如下属性即可:android:launchMode="singleTop"
如果我的回答没能帮助您,请继续追问。

如何让应用程式单例项执行

、VC实现
Visual C++ WIN32程式设计主要强程式设计工具引用名说VC想没VC做废少说面看看用VC何功能
A. 使用编译器实现(使用MFC框架):
.cpp档案加几行:#pragma data_seg("Shared") int volatile g_lAppInstance =0; #pragma data_seg()
我看面内容:
第句 #pragma data_seg("Shared") 建立称Shared 新节
第二句 int volatile g_lAppInstance =0 g_lAppInstance 放入Shared节注意g_lAppInstance初始化编译器才其放入Shared节否则放入Shared外节(实际Visual C++ 编译器提供allocate 说明符使我资料放任何节)
第三句指示编译器Shared 节结束#pragma ment(linker,"/section:Shared,RWS")
句我使编译连结器知道我Shared节具读写共享属性我实现互斥执行关键我应用程式间例项间共享g_lAppInstance 变数
InitInstance() 函式加入:if(++g_lAppInstance>1) { AfxMessageBox("程式已经执行!"); return FALSE; }
程式码作用程式始g_lAppInstancd 加1 发现其值于1显示Message Box ,并返FALSE(注意:MFCInitInstance返FALSE程式执行)
B.使用命名互斥象:
使用API函式CreateMutex建立命名互斥象实现程式互斥比较通用我IninInstance()函式加入程式码:HANDLE hObject = CreateMutex(NULL,FALSE,"LJPXYXC"); if(GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(hObject); AfxMessageBox("程式已经执行!"); return FALSE; }
CreateMutext函式建立称LJPXYXC命名互斥象程式第二例项运例呼叫CreateMutex 返ERROR_ALREADY_EXISTS我根据值实现程式互斥执行
二、VB实现
VB实现程式全域性象App.PreInstance实现功能App.PreInstance boolean型值其值True说明程式已例项执行False程式执行
我窗体载入事件程式设计实现功能,程式码:Private sub Form1_load() If App.PreInstance = True then MsgBox 程式已经执行 Unload me End if End sub
三、Delphi,C++Builder 实现
我没发现Delphi C++Builder 编译器实现像VC功能所我呼叫CreateMutex实现功能
CreateMutext(),GetLastError()两函式详细资讯参考MSDN.

安装flash player 提示: 该应用程式只能执行一个例项

第一、开始——设定——控制面板——双击新增与删除程式 解除安装掉flsh等相关档案
第二C:\WINDOWS\system32\Macromed\Flash 把资料夹删掉!不行用QQ电脑管家粉碎
第三:开始 执行 regedit 开启登录档 顺序展开HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia删掉
然后F3出现框 输入:“MACHINE”然后回车!搜寻!搜寻完毕之后!删掉所找到的!关闭登录档
第四:下载 9.0 版 或10版 安装!
第五、下载flash player plugin 安装
第六、注意安装软体必定要关闭浏览器,ctrl+alt+delete开启工作管理员,检视程序!是否“IEXPLORE.EXE"程序在执行!如果是!请注意右键结束程序!
----------------------------------------------------
可以看看是不是用的是administrator计算机管理员的那个使用者
开启我的电脑——控制面板——使用者账户 然后建立一个新账户 名字随便 密码有没有也随便(
再开始——执行——control userpasswords2——在使用者名称那边选亲新建的那个——确定(如果是灰色不能选择 把[要使用本机,使用者必须输入使用者名称和密码]打上勾)
然后再重新开机 当然你进的就是你新建的那个使用者了
然后再开始——执行——control userpasswords2——换回原来的administrator——确定
再重新启动 去下载最新的flash player就OK了
反正以前一个礼拜里我按百度知道里MINA的回答(没删干净等方法)都不管用 但最重要的我还是个电白(TAT) 半猜办弄的就好了
1.全部清除掉原来没删除完的FLASH外挂,具体地址:C:\WINDOWS\system32\Macromed\Flash,Flash资料夹里的东东要全部清除干净!
2.重新启动机子安装下载的Flash Player 版本10.1外挂就好了

如何使一个exe只执行一个例项

关键字:VC如何使应用程式只执行一个例项,VC 只执行一次,只给一个程式执行 在开发网路应用程式的时候,由于埠分配和占用问题,经常出现某程式只给执行一个例项的情况.

如何使用SSH协议执行X应用程式

SSH 为 Secure Shell 的缩写,由 IETF 的网路工作小组(Neork Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议如果使用Ubuntu或者其他Linux版本,已经安装了连线到远端计算机的软体

相似回答