首页 新闻 会员 周边 捐助

WPF一台电脑只能运行一个程序

0
悬赏园豆:20 [已解决问题] 解决于 2012-06-01 15:06

如题,让一台电脑只能运行一个WPF程序,怎么做?

雨逸凡尘的主页 雨逸凡尘 | 初学一级 | 园豆:7
提问于:2012-05-31 16:58
< >
分享
最佳答案
1

你是说同一个WPF应用只能运行一个进程吧?如果是这样,你还要考虑:

1——

在多用户的状态下,是否也这样限制?也就是说这个一个进程是限制在整台电脑上还是只是指定的用户。

2——

应用程序可以存放在不同的路径下,你是限制在同一个文件存储位置的应用只能运行一个进程还是无论存储在什么位置都是这样?

 

对于同一个存储路径下的限制,你可以在应用程序启动的时候,搜索所有进程,发现跟当前要运行的进程(应用)的运行路径一致,说明是重复运行,采取策略处理。

 

假如是限制无论如何复制应用程序(改名、放置不同的位置)都只能运行一个,这个需要通过一个进程锁的机制来解决,菜鸟程序猿已经说了,在.NET里最简单的就是单例模式。此外,你也可以通过写注册表或者通过进程间通讯的方式来识别。

收获园豆:20
无之无 | 大侠五级 |园豆:5095 | 2012-05-31 17:31

我就是要他不管什么情况,一台电脑就只能运行一个客户端,说白了就是不让双开

雨逸凡尘 | 园豆:7 (初学一级) | 2012-06-01 09:01

@雨逸凡尘: 

.NET里有一个方案,但是我忘记了,找了下以前的代码,发现没用那个方案,就把以前的方案写出来:

1——

限制应用程序的文件名,比如ABC.EXE。禁止修改,如果修改了,则不允许运行。

2——

查找所有进程中应用程序文件名为ABC.EXE的进程,如果有则已经运行(这个方案是简化方案,基于vabc.exe不会被别的应用使用)

3——

稍微升级点,检测已运行的进程(ABC.EXE),查看这个进程的文件版本信息,看版本是否跟当前应用一致(主要是EXE文件也有一个GUID),可以AssemblyInfo的方式获得。

无之无 | 园豆:5095 (大侠五级) | 2012-06-01 09:36

@雨逸凡尘: 

下面这代码能解决你的问题,不需要我前面说的那么繁复。

    class Program
    {
        static void Main(string[] args)
        {
            bool createdNew;
            using (Mutex mutex = new Mutex(false, "My Uniqued Application Identity, e.g.: Module Guid", out createdNew))
            {
                if (createdNew)
                {
                    //RunApplication
                }
            }
            return;
        }
    }

其中的字符串参数你可以根据需要设定。

无之无 | 园豆:5095 (大侠五级) | 2012-06-01 13:46
其他回答(1)
0

可以看看单例模式,就是解决这类问题的

草根程序猿 | 园豆:129 (初学一级) | 2012-05-31 17:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册