请问怎样实现同一目录下的程序只能运行一个实例,而同一个程序在不同目录下的可以同时运行?
比如有软件A,初始位置在 D:\A文件夹\ 我打开A文件夹下的程序之后,再想打开他就会提示已经在运行
但是我把A复制到B文件夹 D:\B文件夹\ 这时再打开程序时就可以打开了.

解决方案 »

  1.   

    http://xxinside.blogbus.com/logs/47162540.html
    将带程序路径的程序可执行名当作互斥量名。不过要注意,程序可以在运行的时候在相同盘内移动。
      

  2.   

    你试下就知道了。打开一个程序,在运行中尝试将exe移动到另一个文件夹中(必须在同一个盘,不同盘移动本质上是复制+删除)。系统会允许你这么做。
      

  3.   


    还要麻烦您帮忙看一下 我用了那段代码之后,当试图运行第二个实例时,弹出错误提示框,错误如下.NET-BroadcastEventWindow.2.0.0.0.33c0d9d.0: test.exe - 应用程序错误
    "0x10002627"指令引用的"0x00000010"内存。该内存不能为"read"。
    要终止程序,请单击“确定”。我的代码如下:[STAThread]
            private static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                AppDomain.CurrentDomain.AppendPrivatePath("System");
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Program.CurrentDomain_UnhandledException);
                Application.ThreadException += new ThreadExceptionEventHandler(Program.Application_ThreadException);
                    bool firstInstance;
                    mutex = new Mutex(true, @"Global\"+myTool.GetMD5Hash(Application.StartupPath), out firstInstance);
                   
                    try
                    {
                        if (firstInstance)
                        {
                            Application.Run(new F_Main());
                        }
                    }
                    finally
                    {
                        //只有第一个实例获得控制权,因此只有在这种情况下才需要ReleaseMutex,否则会引发异常。
                        if (firstInstance)
                        {
                            mutex.ReleaseMutex();
                        }
                        mutex.Close();
                        mutex = null;
                    }
            }