登录的时候会在[用户表]中记录计算机名、进程号(任务管理器中的进程号)、在线状态,退出再注销。问题是非正常退出就无法注销。
    我就想,登录的时候能否判断是非正常退出导致无法注销的话就直接允许登录,如果正常在线的话就拒绝。
    那用什么办法呢?dbo.sysprocesses中记录了连接计算机名、进程号,能不能利用它和[用户表]的计算机名、进程号来做比较呢?
    謝謝!

解决方案 »

  1.   

    不能,dbo.sysprocesses只是sql串连接过来的进程,和你的用户表没啥关系.
      

  2.   


    try
                {
                    Application.Run(Frmconnectservers);
                }
                catch(Exception err)
                {
                    //异常退出 开始注销当前座席
                    
                }
      

  3.   

    我们是登陆日志表,记录登陆时间,IP,人员ID,关闭时间,如果没有关闭时间,就不允许这个用户再次登陆
    机房有UPS,服务器断电基本不会发生,但是如果客户机断电,没法记录关闭时间,所以还用另一个判断,就是
    判断登陆IP……
      

  4.   

    任何判断都没有用,唯一办法就是在有UPS的服务器端监控座席端机器消息;
      

  5.   

    判断此次登录的IP跟上次登录的IP
      

  6.   

    是判断此次登陆的IP和上次登录的IP,因为IP一般来说都是固定的,计算机名可以更改
    如果可以还可以记录实际地址(MAC地址),这样只要不是换网卡,就不会出现问题
      

  7.   

    我当时解决这个问题,就是如果断电或者其他意外,没有正常关闭系统,没记录退出时间
    就保留IP,直到该用户下一次登陆系统的时候,如果IP地址是原来的IP,就把这次登陆的
    时间补到上次的退出时间,如果是该用户另一个IP登陆系统,就把上一次用户登陆的,
    并且没有退出时间的那一条记录设成删除值(BIT字段,或者直接删除),这次重新开始记录
    ,这时如果该用户如果再用原IP登陆时(重复登陆),就查该用户是否存在未退出的时间未删除的记
    录(不管IP)只要有,就代表已经登陆(换IP了,也是登陆了,已经记录下了登陆时间)。
    除非他换IP的那个记录有了离开时间,他才可以再次登陆,我就是这么解决的,不是很好
    你可以参考的看一下,希望对你有帮助。
      

  8.   


    如果是同一台電腦登錄兩次,就用 進程 來判斷正在運行嗎?
    System.Diagnostics.Process.GetProcessById(int processId,string machineName);//但這個方法要用電腦名做
    參數謝謝啦,我再查查怎麼判斷某個程序正在運行
      

  9.   


    可以这样判断。
    我上面的方法比较笨,需要判断的比较多,再碰到这种情况下,还需要判断
    最近一次该用户操作时间,来防止其他IP登陆,或者本机重复登陆来顶当前用户
    所以我的每一个操作里都加入了日志,记录用户ID,使用该功能时间,IP等信息
    如果登录的没有离开时间,最后一次操作与这次登陆的时间相差超过6小时,
    就算可以登陆,所以不是很好……
      

  10.   

    非常感謝各位!
    特別感謝wanshichen!
      

  11.   

    怕客户端断电的话 可以加一个用户电脑的启动时间列,这个程序中可以用WMI方便的得到的。
      

  12.   

    WMI中Win32_OperatingSystem类LastBootUpTime属性就是用户电脑上次启动时间
      

  13.   

    我一直没有查到比较好的解决办法,目前的需要判断用户登陆的2个WINFORM程序,都是用这种笨办法
    如果确实是死机,没超过6小时就想使用,就只能联系管理员,或者在SQL后台直接填离开时间,解锁。
      

  14.   

    这个配合IP,好像可以解决这个问题,我说一下思路,大家参考一下,对不对
    如果是IP相同,就参考启动时间是否一样,就可以解决本机重复登陆的问题,(希望不会有人再另一台机器上输入自己的IP)
    如果IP不同,再进行一下类似我上面的判断,应该可以解决。