多用户登录同一台机器,如何只运行一个实例

时间:2022-08-29 11:31:12
是这样,一台服务器上运行着一个VB6程序,当我远程登录后,会启动新一个用户,就是在进程管理器里有2个相同的用户,这时原来运行着的程序,会又运行起来一份..我如何作到,登录后,在登录这个界面里,不运行另一个原来的WIN界面里,已运行的程序呢???

24 个解决方案

#1


做成服务。。

#2


你说的是服务器上的程序会运行两份?如果是这样,说明你服务器上的程序里有这样的设置,一般作为服务程序的都是只运行一个的。

#3


if app.previnstance then 
  msgbox ″程序正在运行,请检查窗口是否被最小化。″ 
  end if

#4


说明一下..WIN2003操作系统,是可以多用户登录的,,可以互相切换.
我说的是,程序在A用户登录的界面里运行着.
在B或者C用户登录的界面里,,我不想让这个程序运行.请问如何操作..
app.previnstance 就免了..这个只在同一用户下管用...

#5


学习,帮顶

#6


明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

#7


有没有高手指点一下哟..

#8


有没有高手指点一下哟..

#9


每天顶一贴,可有效防止蛀牙!

#10


引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~

#11


很简单。程序启动后在注册表的一个位置写个标志位比如1表示已经运行了程序退出就填回0,这种是程序没有非法退出或者windows非法关机之类的情况下。建议最好是遍历进程,在程序启动的时候遍历进程,如果发现进程存在了就退出

#12



建一个临时表(只需一个字段,一条记录),表头格式自己设置一下,登录的时候判断一下数据库里有没有像这样的表就可以了。

#13


引用 10 楼 chinaboyzyq 的回复:
引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~

猴哥的蓝花又回来了啊 多用户登录同一台机器,如何只运行一个实例

#14


呵呵 ,有没有一个认真点的呀...

#15


引用 14 楼 tgc99 的回复:
呵呵 ,有没有一个认真点的呀...


用标记的方法你不认为是一种简单可行的办法吗?

#16


遍历进程取特征这是最安全,最有效的方法了

#17


引用 10 楼 chinaboyzyq 的回复:
引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~


要是程序异常退出,来不及消除那个标记,那个标记还存在,就永远别想再启动程序了。

#18


结合app.previnstance啊
怎么就瞧不起app.previnstance 了?
楼上有些建议还是不错的
看你怎么用
既然听不进别人的话就别问

引用 17 楼 cqcpl 的回复:
引用 10 楼 chinaboyzyq 的回复:
引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~



要是程序异常退出,来不及消除那个标记,那个标记还存在,就永远别想再启动程序了。

#19


要是程序异常退出,来不及消除那个标记,那个标记还存在,就永远别想再启动程序了。
 ==>
在于你怎么处理异常了!
以前我给mdb文件加密(其实是处理文件头,让access不认识这个文件),也会碰到类似的情况,之后只好在异常时都在处理这个加密过程了,这样就保证异常退出后,系统还能再次正常进入系统。

#20


做成全局服务,无论如果只会运行一份。
如果需要本人可给你提供一个Demo。

#21


做标记的办法是可行的,也是最简单的,需要自己处理异常,但做成服务则可以不用管理这些

#22



if (NULL == CreateMutex(&sa, TRUE, _T("Global\\MyPrgName")))
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
//已经有用户运行啦, 退出
}
}

GetSystemMetrics() 可判断当前是否终端服务

#23


条条大道通罗马,依需而行~~~

#24


谢谢大家...问题解决,,,使用了CreateFile,CloseHandle两个API

#1


做成服务。。

#2


你说的是服务器上的程序会运行两份?如果是这样,说明你服务器上的程序里有这样的设置,一般作为服务程序的都是只运行一个的。

#3


if app.previnstance then 
  msgbox ″程序正在运行,请检查窗口是否被最小化。″ 
  end if

#4


说明一下..WIN2003操作系统,是可以多用户登录的,,可以互相切换.
我说的是,程序在A用户登录的界面里运行着.
在B或者C用户登录的界面里,,我不想让这个程序运行.请问如何操作..
app.previnstance 就免了..这个只在同一用户下管用...

#5


学习,帮顶

#6


明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

#7


有没有高手指点一下哟..

#8


有没有高手指点一下哟..

#9


每天顶一贴,可有效防止蛀牙!

#10


引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~

#11


很简单。程序启动后在注册表的一个位置写个标志位比如1表示已经运行了程序退出就填回0,这种是程序没有非法退出或者windows非法关机之类的情况下。建议最好是遍历进程,在程序启动的时候遍历进程,如果发现进程存在了就退出

#12



建一个临时表(只需一个字段,一条记录),表头格式自己设置一下,登录的时候判断一下数据库里有没有像这样的表就可以了。

#13


引用 10 楼 chinaboyzyq 的回复:
引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~

猴哥的蓝花又回来了啊 多用户登录同一台机器,如何只运行一个实例

#14


呵呵 ,有没有一个认真点的呀...

#15


引用 14 楼 tgc99 的回复:
呵呵 ,有没有一个认真点的呀...


用标记的方法你不认为是一种简单可行的办法吗?

#16


遍历进程取特征这是最安全,最有效的方法了

#17


引用 10 楼 chinaboyzyq 的回复:
引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~


要是程序异常退出,来不及消除那个标记,那个标记还存在,就永远别想再启动程序了。

#18


结合app.previnstance啊
怎么就瞧不起app.previnstance 了?
楼上有些建议还是不错的
看你怎么用
既然听不进别人的话就别问

引用 17 楼 cqcpl 的回复:
引用 10 楼 chinaboyzyq 的回复:
引用 6 楼 bloom8848 的回复:
明白你的意思了,那就用文件共享来控制?
运行起来以后在某处写个标记:我运行了
如果有这个标记那就别运行了

这个是最简单的办法~~~



要是程序异常退出,来不及消除那个标记,那个标记还存在,就永远别想再启动程序了。

#19


要是程序异常退出,来不及消除那个标记,那个标记还存在,就永远别想再启动程序了。
 ==>
在于你怎么处理异常了!
以前我给mdb文件加密(其实是处理文件头,让access不认识这个文件),也会碰到类似的情况,之后只好在异常时都在处理这个加密过程了,这样就保证异常退出后,系统还能再次正常进入系统。

#20


做成全局服务,无论如果只会运行一份。
如果需要本人可给你提供一个Demo。

#21


做标记的办法是可行的,也是最简单的,需要自己处理异常,但做成服务则可以不用管理这些

#22



if (NULL == CreateMutex(&sa, TRUE, _T("Global\\MyPrgName")))
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
//已经有用户运行啦, 退出
}
}

GetSystemMetrics() 可判断当前是否终端服务

#23


条条大道通罗马,依需而行~~~

#24


谢谢大家...问题解决,,,使用了CreateFile,CloseHandle两个API