【发布时间】:2021-12-02 07:47:31
【问题描述】:
我有一个程序在启动时检查它是否已经在运行:
Mutex mutex = new Mutex(true, "Programname", out createdNew);
if (!createdNew)
{
MessageBox.Show("The program is already running.");
return;
}
这已经工作了很多年。现在一些客户说他们在第一次运行程序时重新启动 Windows 后得到了这个。
微软改变了什么?这个系统有缺陷吗?
编辑: 事实证明这是正确的,用户启动了两次。问题是它在启动过程中使用的时间比平时长,并且没有显示窗口。所以用户又开始了......我应该删除问题吗?
【问题讨论】:
-
使用WinObj。并检查哪个进程拥有该互斥锁。
-
Programname是不是一个简单、直接的词或一些其他程序也可能选择的词?我几乎总是建议使用 GUID 或其他 极不可能被意外复制 字符串。 -
如果我以管理员身份运行它并运行我自己的程序,我会在 WinObj 中找到它。但是我发现没有提到什么程序拥有它,即使我在这种情况下知道。有小费吗?名称不是Programname,而是out company的名称和程序名称,命名应该不会崩溃。