社区
C++ Builder
帖子详情
如何避免软件的重复运行?
zhaoxinghan
2007-07-03 11:16:23
想设计一个软件,用户在同一时间只能开启一个,一台电脑不能同时运行多个,应怎么设计?
...全文
261
13
打赏
收藏
如何避免软件的重复运行?
想设计一个软件,用户在同一时间只能开启一个,一台电脑不能同时运行多个,应怎么设计?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
「已注销」
2007-08-06
打赏
举报
回复
mark
truelove7283159
2007-07-11
打赏
举报
回复
来晚了
laowang2
2007-07-11
打赏
举报
回复
内存映射好点.
yangar9179
2007-07-10
打赏
举报
回复
这么多人答了,来晚了,用互斥吧
Jim@luckeeinc.com
2007-07-04
打赏
举报
回复
HANDLE hMutex 互斥方法
cczlp
2007-07-04
打赏
举报
回复
好像大家都忘记 FAQ 的存在了
constantine
2007-07-04
打赏
举报
回复
看FAQ
cczlp
2007-07-04
打赏
举报
回复
//--季老大的代码--------------------------------------------------------------------
class TSharedMem
{
private:
bool FCreated;
BYTE *FFileView;
HANDLE FHandle;
public:
TSharedMem(const char* Name, int Size);
~TSharedMem();
__property BYTE* Buffer = {read=FFileView};
__property bool Created = {read=FCreated};
};
TSharedMem::TSharedMem(const char* Name, int Size)
{
FHandle = CreateFileMapping((HANDLE)0xFFFFFFFF,
NULL, PAGE_READWRITE, 0, Size, Name);
if (FHandle != NULL)
{
FCreated = GetLastError() == 0;
FFileView = (BYTE*)MapViewOfFile(FHandle,
FILE_MAP_WRITE, 0, 0, Size);
if (FFileView && FCreated)
{
ZeroMemory(FFileView, Size);
}
}
else
{
FFileView = NULL;
}
}
TSharedMem::~TSharedMem()
{
if (FFileView)
{
UnmapViewOfFile(FFileView);
}
if (FHandle)
{
CloseHandle(FHandle);
}
}
/*
你可以直接使用这个class,来达到让程序只运行一个实例。方法如下:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
TSharedMem SharedMem("我的程序名", 8);
if (!SharedMem.Created) return 0;
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
*/
i_love_pc
2007-07-04
打赏
举报
回复
winmain函数在工程源文件下,如果你的工程名为Project1,那就打开Project1.cpp文件,按照一楼写的方法添加就可以。
zhaoxinghan
2007-07-04
打赏
举报
回复
C++ builder的winmain函数应该怎么修改呢?不好意思,我很菜,能说的详细一些么?
ccrun.com
2007-07-04
打赏
举报
回复
至少有三种以上的方法。
具体请查看FAQ。
jacknes009
2007-07-04
打赏
举报
回复
//---------------------------------------------------------------------------
#include <string.h>
#include <fstream.h>
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
const string FMutex = "Mutex_ONLY_ONE";
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{ /*
var
hMutex: HWND;
iRet: integer;
begin
Application.Initialize;
hMutex := CreateMutex(nil,False,PChar(FMutex));
iRet := GetLastError;
if iRet <>ERROR_ALREADY_EXISTS then
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
ReleaseMutex(hMutex);
*/
HWND hMutex;
int iRet;
Application->Initialize();
hMutex = CreateMutex(NULL,False,FMutex.c_str());
iRet = GetLastError();
if(iRet != ERROR_ALREADY_EXISTS)
{
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
else
{
ShowMessage("Message");
}
ReleaseMutex(hMutex);
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
___NULL
2007-07-04
打赏
举报
回复
给你个最简单的,修改一下 WinMain 函数即可
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
HANDLE hMutex=CreateMutex(NULL,TRUE,"jf9i3hscb 随便写啦");
if(hMutex==NULL||GetLastError() == ERROR_ALREADY_EXISTS)
{
MessageBox(NULL,"系统中已存在一个正在运行的副本","XXX",MB_OK);
CloseHandle(hMutex);
return FALSE;
}
Application->Initialize();
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TAboutBox), &AboutBox);
// Application->ShowMainForm = false;
Application->Run();
}
catch (Exception &exception)
...
C# 检查是否已经
运行
(两种方法)
我们举个例子:如音乐播放
软件
你能够选择
重复
运行
吗? 你在注册表(Reg)中关联了右键快捷打开方式,但是如果软 件只是单纯意味上的
重复
运行
实例 想必用户看到这样的软 件表情一定会很夸张 很让人感到好笑。不过谈...
C# WinForm
避免
程序
重复
启动,限制程序只能
运行
一个实例
禁止多个进程
运行
,当
重复
运行
时激活以前的进程 Program.cs: using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; using System....
QT中QSharedMemory防止
软件
重复
打开
QT中QShareMemory防止
软件
重复
打开 在
软件
开发中,经常需要将
软件
有且打开一个,后续就不能再次打开。这里介绍的是使用共享内存来实现的控制。 QShareMemory相关接口分为attach进程绑定,detach进程分离,create共享...
自动开关机
软件
哪个好?自动开关机
软件
盘点
如果时常出现类似的现象,就需要一款使用方便的自动开关机
软件
了,毕竟开机太久也会影响硬件的寿命!那么,自动开关机
软件
哪个比较好用呢?感兴趣的朋友,不妨和小编一起来了解一下。 1.定时执行专家 定时执行...
常用的电气制图
软件
有哪些?以及各自的优缺点
常用的电气制图
软件
有哪些?以及各自的优缺点 电气画图
软件
: No.1 "SuperWORKS”(优势:国内
软件
,容易上手) SuperWORKS是利驰
软件
历经15年持续不断的升级换代开发的专业电气CAD
软件
,目前已经产品系列化,包括...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章