一个项目中有多个EXE文件,其中一个是登录窗口,其余的几个在启动的时候都要先检查是否已经登录成功,以好给指定权限。
    现在的问题是怎么才能使之有效,即当我运行其他任何一个EXE文件时,如果这些EXE文件中没有其他打开的情况下,自动调用登录窗口.exe,如果已经打开了其中一个EXE,即已经进入该系统,则不再调用登录窗口,而是根据用户名和权限值直接使用。
    我的解决方法是,在注册表中记录本项目中所有的EXE文件,如果其中一个EXE打开,则在注册表中标记已经打开,当退出时再取消标记,每个窗口在退出时都再检查一下是否有其他EXE在运行,如果没有,则还要在注册表中取消登录时登记的用户名、权限、密码等值。如果打开的EXE不是本项目中第一个打开,则直接读取其用户名、密码、权限等值,不用再运行一次登录窗口。
    但这种方法存在一定的问题,即当非法退出系统后(如突然断电等),注册表中还是记录有值,而不会自动消失,下次也就不会再登录就可使用了(但也只有一次)。各位大虾谁做过这个东东,谁还有更好的方案?区区100分不成敬意
我的妹儿:[email protected]    [email protected]

解决方案 »

  1.   

    我是用的SOCKET进行控制的  try
        ServerSocket2.Active:=true;
        serversocket2.Open;
        ServerSocket2.Socket.Lock;
        ........//进行验证
      except
        begin
          MessageBox(Application.handle,'客户端程序已经运行!','提示',MB_OK + mb_iconerror+MB_ICONExclamation);
          ........//直接使用
        end;
      

  2.   

    使用Findwindow判断是否已经有你需要的程序在运行,然后按照你的需求进行处理!!!
      

  3.   

    首先不应该将标记程序是否打开放在注册表里面,很不安全!另外我建议楼主在整个项目组中建立一个公共单元文件,其中设置多个标记,分别对应其他的多个Exe文件。然后在所有的Exe文件的MainForm的OnClose事件中对这些标记进行设置:退出则置为0,否则则置为1。然后通过对所有标记进行或运算来判断是否当前有某个Exe文件处于打开状态!另外,楼上那个朋友说使用Socket进行控制,我想听听这个朋友的意见!等....