如何在C#中允许来自同一目录但来自不同目录的多个实例的单实例应用程序?

如何在C#中允许来自同一目录但来自不同目录的多个实例的单实例应用程序?,c#,instance,executable,single-instance,C#,Instance,Executable,Single Instance,如何允许从同一目录启动单个实例应用程序,但允许从同一可执行文件的不同目录启动多个实例 更清楚地说, 我希望从“C:\Directory1” 我想从“C:\Directory2” 可以同时运行MyProgram.Exe和MyProgram.Exe 我现在正在做的是使用互斥,但我不知道如何实现这一点: public partial class App : Application { private static Mutex _mutex = null; // Application

如何允许从同一目录启动单个实例应用程序,但允许从同一可执行文件的不同目录启动多个实例

更清楚地说,

我希望从
“C:\Directory1”

我想从
“C:\Directory2”

可以同时运行
MyProgram.Exe
MyProgram.Exe

我现在正在做的是使用互斥,但我不知道如何实现这一点:

public partial class App : Application
{
    private static Mutex _mutex = null;
    // Application GUID
    private string _applicationGUID = "4hfd130b-1eh6-4979-bbqc-08g16478c36f";

    public App()
    {
        bool isNewInstance;

        _mutex = new Mutex(true, _applicationGUID, out isNewInstance);

        if (!isNewInstance)
        {
            MessageBox.Show("An application is already running. Closing...", "MyProgram", MessageBoxButton.OK, MessageBoxImage.Exclamation);

            Current.Shutdown();
        }
        else
        {
            // Other stuff ...
        }

    }
}
您的帮助将不胜感激。

您可以使用(或exe路径)作为命名互斥体,无论是否使用您的Id

获取加载的文件的完整路径或UNC位置,该文件包含 舱单

或者说是完全过火了

var location = Assembly.GetEntryAssembly().Location;
var hs = System.Security.Cryptography.MD5.Create();
var bytes = hs.ComputeHash(System.Text.Encoding.UTF8.GetBytes(location));

_mutex = new Mutex(true, Convert.ToBase64String(bytes), out isNewInstance);

我猜,将目录名小写散列并将其放入命名的互斥体中,或者您可以直接使用目录名,但不确定互斥体名称中允许使用什么though@TheGeneral,显然你是对的。如果我将
\u applicationGUID
与de目录名连接起来,它就可以工作了,我只是尝试了一下。你能把答案贴出来吗?谢谢。@sodjsn26fr你让我感兴趣了。。由于我喜欢学习有关c#和可用语言功能的新知识,所以我开始研究通常的互斥。您能解释一下您的要求是什么,您需要使用互斥,从未使用过互斥,所以不知道在什么情况下需要/有益。@Seabizkit,您可以查看和。当做
var location = Assembly.GetEntryAssembly().Location;
var hs = System.Security.Cryptography.MD5.Create();
var bytes = hs.ComputeHash(System.Text.Encoding.UTF8.GetBytes(location));

_mutex = new Mutex(true, Convert.ToBase64String(bytes), out isNewInstance);