C# 检查启动的程序是否已经在运行 判断问题

Struggle哥 2012-08-09 08:57:29
//检查启动的程序是否已经在运行
private static void CheckRunning()
{
bool newMutexCreated = true;
using (new Mutex(true, Assembly.GetExecutingAssembly().FullName, out newMutexCreated))
{
if (!newMutexCreated)
{
MessageBox.Show("该程序已经被运行");
System.Environment.Exit(0);
//return;
}
}
}

为什么 newMutexCreated 返回值总是 true
...全文
595 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
isjoe 2012-08-10
  • 打赏
  • 举报
回复


/// <summary>
/// 互斥实例
/// </summary>
private Mutex m_mt = null;

/// <summary>
/// 标识是否一个实例已经运行
/// </summary>
private bool m_bIsRun = false;

/// <summary>
///
/// </summary>
/// <param name="lpClassName"></param>
/// <param name="lpWindowName"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);


/// <summary>
///
/// </summary>
/// <param name="hwnd"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
public static extern IntPtr SetForegroundWindow(IntPtr hwnd);

/// <summary>
/// 构造函数
/// </summary>
public frm_Login()
{
try
{
this.MutexRun();
}
catch (Exception me)
{
DevExpress.XtraEditors.XtraMessageBox.Show(me.Message);
}
InitializeComponent();
}

#endregion

#region -初始化提取信息

/// <summary>
/// 单实例设置
/// </summary>
private void MutexRun()
{
bool bRun;
m_mt = new Mutex(true, "TestRun", out bRun);
if (!bRun)
{
//检查当前程序是否运行,如果已经运行则设置为前端显示提醒用户
IntPtr Hander = CommonGenerator.FindWindow(null, "你的程序窗口标题");
if (Hander != IntPtr.Zero)
{
CommonGenerator.SetForegroundWindow(Hander);
}
m_mt.Close();
Environment.Exit(1);
return;
}
}
  • 打赏
  • 举报
回复
都是牛逼人,这方法还真没用过
wy811007 2012-08-09
  • 打赏
  • 举报
回复
Program.cs 应该写在这个文件里判断程序是否已经启动
其实你这个不是所谓的判断启动
而是想弄同一个程序不能运行第二次吧


namespace FormDemo
{
static class Program
{
private static Mutex FapiTaskMutex;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
try
{
FapiTaskMutex = Mutex.OpenExisting(@"Global\FapiTaskMutex");
return;
}
catch (WaitHandleCannotBeOpenedException)
{
FapiTaskMutex = new Mutex(false, @"Global\FapiTaskMutex");
}
catch (Exception)
{
return;
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form_Main());
}
}
}
小志 2012-08-09
  • 打赏
  • 举报
回复
namespace MonitorsTool.CM {
static class Program {
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main() {
try {
bool canCreateNew = false;
Mutex mutex = new Mutex(true, Process.GetCurrentProcess().ProcessName, out canCreateNew);

if (canCreateNew) {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
mutex.ReleaseMutex();
} else {
MTMessageBox.ShowInfoMessageBox(null, "监视器工具已经在运行中", false);
}
} catch (Exception ex) {
Global.mainLog.Error("监视器工具无法启动", ex);
MTMessageBox.ShowErrorMessageBox(null, "监视器工具无法启动", false);
}
}
}
}
北京的雾霾天 2012-08-09
  • 打赏
  • 举报
回复
参考一下如下代码:
[STAThread]
static void Main()
{
bool isNew = false;
System.Threading.Mutex mInstance = new System.Threading.Mutex(true, "test", out isNew);
if (!isNew)
{
mInstance.Close();
return;
}

//...

mInstance.ReleaseMutex();
mInstance.Close();
}
ParanoidKing 2012-08-09
  • 打赏
  • 举报
回复
Mutex对象不能放在using里面,它不能被关掉
kingdom_0 2012-08-09
  • 打赏
  • 举报
回复
还有,在程序中,除了初始化之外,你没有对变量 newMutexCreated 赋过值
kingdom_0 2012-08-09
  • 打赏
  • 举报
回复
如果你的程序代码 在你验证的启动的程序中,肯定每次都是返回true
C#源码大集合 01(共3卷)之前分为四个包,后两个包上传不了,对于已经下载的朋友表示赚意,现在重新再发一次(改为3卷)├─C#源码第一部分│ ├─第1章 控件操作│ │ ├─实例1 如何使用错误提醒控件│ │ ├─实例10 如何使用列表视图控件│ │ ├─实例11 如何使用多选列表框控件│ │ ├─实例12 如何使用图像控件│ │ ├─实例13 如何使用窗体分隔控件│ │ ├─实例2 如何使用信息提示控件│ │ ├─实例3 如何使用菜单控件│ │ ├─实例4 如何使用工具栏控件│ │ ├─实例5 如何使用状态栏控件│ │ ├─实例6 如何使用托盘控件│ │ ├─实例7 如何使用标签页控件│ │ ├─实例8 如何使用进度条控件│ │ └─实例9 如何使用树视图控件│ ├─第2章 文件管理│ │ ├─实例14 如何获取程序文件信息│ │ ├─实例15 如何获取指定文件的根信息│ │ ├─实例16 如何获取当前程序所在的文件夹│ │ ├─实例17 如何获取指定文件夹下的所有文件│ │ ├─实例18 如何获取指定文件夹下的所有文件夹│ │ ├─实例19 如何获取和设置文件属性│ │ ├─实例20 如何获取和设置文件夹属性│ │ ├─实例21 如何判断文件或文件夹是否存在│ │ ├─实例22 如何创建和删除多层文件夹│ │ ├─实例23 如何监视文件和文件夹系统变化情况│ │ ├─实例24 如何加解密文件│ │ ├─实例25 如何切分组合文件│ │ ├─实例26 如何以流式方式读写文本文件│ │ ├─实例27 如何直接打印文件│ │ ├─实例28 如何操作帮助文件│ │ ├─实例29 如何操作WORD文件│ │ ├─实例31 如何播放MP3文件│ │ ├─实例32 如何播放VCD文件│ │ ├─实例33 如何播放DVD文件│ │ ├─实例34 如何播放Flash文件│ │ └─实例35 如何播放RealPlayer文件│ ├─第3章 程序设置│ │ ├─实例36 如何创建椭圆形窗体│ │ ├─实例37 如何创建文字形窗体│ │ ├─实例38 如何创建不规则窗体│ │ ├─实例39 如何创建移动的窗体│ │ ├─实例40 如何创建无标题栏窗体│ │ ├─实例41 如何拖动无标题栏窗体│ │ ├─实例42 如何制作自绘式菜单│ │ ├─实例43 如何制作图形组合框│ │ ├─实例44 如何设置窗体的透明度│ │ ├─实例45 如何设置窗体启动位置│ │ ├─实例46 如何设置窗体最前端显示│ │ ├─实例47 如何实现精灵提示│ │ ├─实例48 如何实现打印预览│ │ ├─实例49 如何实现剪贴板循环│ │ ├─实例50 如何实现菜单历史列表│ │ ├─实例51 如何实现程序互斥运行│ │ ├─实例52 如何屏蔽鼠标消息│ │ ├─实例53 如何模拟键盘输入│ │ ├─实例54 如何使用消息提示框│ │ ├─实例55 如何使用系统API函数(INI)│ │ ├─实例56 如何获取和设置输入法│ │ ├─实例57 如何在程序启动其他程序│ │ ├─实例58 如何在程序中关闭其他程序│ │ ├─实例59 如何在开机时自动启动程序│ │ ├─实例60 如何启动电话拨号程序│ │ ├─实例61 如何启动屏幕保护程序│ │ ├─实例62 如何启动系统控制面板程序│ │ ├─实例63 如何编写多线程程序│ │ ├─实例64 如何编写DLL服务端程序│ │ ├─实例65 如何编写DLL客户端程序│ │ ├─实例66 如何编写用户控件程序│ │ └─实例67 如何给程序打包│ ├─第4章 系统维护│ │ ├─实例68 如何获取系统基本信息│ │ ├─实例69 如何获取系统服务信息│ │ ├─实例70 如何获取系统进程信息│ │ ├─实例71 如何获取系统日期时间│ │ ├─实例72 如何获取系统所有驱动器│ │ ├─实例73 如何获取系统驱动器信息│ │ ├─实例74 如何获取系统计数器信息│ │
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧