C# 项目程序唯一启动(程序运行后,不可以在其他地方再运行这个程序)
bool createNew;
Process process = Process.GetCurrentProcess();
Mutex mutex = new Mutex(true, "CMS IDE", out createNew);
if (!createNew)
{
foreach (Process p in Process.GetProcessesByName(process.ProcessName))
{
//不是同一进程并且本进程启动时间最晚
if (p.Id != process.Id && (p.StartTime - process.StartTime).TotalMilliseconds <= 0)
{
// 确保窗口没有被最小化或最大化
ShowWindowAsync(p.MainWindowHandle, 4);
// 设置真实例程为foreground window
SetForegroundWindow(p.MainWindowHandle);// 放到最前端
//关闭当前运行的进程保留之前的进程
Process.GetCurrentProcess().Kill();//这个地方用kill 而不用Shutdown()的原因是,Shutdown关闭程序在进程管理器里进程的释放有延迟不是马上关闭进程的
return;
}
}
//若应用程序.exe文件名不一致,提示消息框
MessageBox.Show("应用程序在其它地方已经运行!", "CMS IDE", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Exit();
return;
}
写在项目启动的main代码中,这里是写在项目的Program.cs的main函数中
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
写在Main外面!
本文作者:羽小兮
本文链接:https://www.cnblogs.com/cloud-sword/p/16469926.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)