一个项目中有多个EXE文件,其中一个是登录窗口,其余的几个在启动的时候都要先检查是否已经登录成功,以好给指定权限。
现在的问题是怎么才能使之有效,即当我运行其他任何一个EXE文件时,如果这些EXE文件中没有其他打开的情况下,自动调用登录窗口.exe,如果已经打开了其中一个EXE,即已经进入该系统,则不再调用登录窗口,而是根据用户名和权限值直接使用。
我的解决方法是,在注册表中记录本项目中所有的EXE文件,如果其中一个EXE打开,则在注册表中标记已经打开,当退出时再取消标记,每个窗口在退出时都再检查一下是否有其他EXE在运行,如果没有,则还要在注册表中取消登录时登记的用户名、权限、密码等值。如果打开的EXE不是本项目中第一个打开,则直接读取其用户名、密码、权限等值,不用再运行一次登录窗口。
但这种方法存在一定的问题,即当非法退出系统后,注册表中还是记录有值,而不会自动消失,下次也就不会再登录就可使用了。
各位大虾谁做过这个东东,谁还有更好的方案?区区100分不成敬意
我的妹儿:duxbin@sohu.com duxbin@elong.com
我是用的SOCKET进行控制的
try
ServerSocket2.Active:=true;
serversocket2.Open;
ServerSocket2.Socket.Lock;
........//进行验证
except
begin
MessageBox(Application.handle,客户端程序已经运行!,提示,MB_OK + mb_iconerror+MB_ICONExclamation);
........//直接使用
end;
有很多方法可以用公共存储区
使用Findwindow判断是否已经有你需要的程序在运行,然后按照你的需求进行处理!!!
哦?一楼的朋友可以说说你的解决办法吗?
首先不应该将标记程序是否打开放在注册表里面,很不安全!
另外我建议楼主在整个项目组中建立一个公共单元文件,其中设置多个标记,分别对应其他的多个Exe文件。然后在所有的Exe文件的MainForm的OnClose事件中对这些标记进行设置:退出则置为0,否则则置为1。
然后通过对所有标记进行或运算来判断是否当前有某个Exe文件处于打开状态!
另外,楼上那个朋友说使用Socket进行控制,我想听听这个朋友的意见!等....
大概思路是,把注册表中的值与数据库全局临时变量,对应起来,然后根据情况对
临时变量修改,更新,
这样断电后或数据库重启,该临时变量消失
也可以建一个检查句柄
为什么不用消息?
在内存中弄个公共的数据区,就不用担心掉电的问题了.