老问题:如何避免两个相同的.exe运行?

gwang119 2008-07-10 11:39:53
怎么避免同一个.exe文件两次运行?
急!
...全文
201 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwb210 2008-07-10
  • 打赏
  • 举报
回复
关注学习
hyblusea 2008-07-10
  • 打赏
  • 举报
回复
用Findwindow()。根据窗口的标题查找
gwang119 2008-07-10
  • 打赏
  • 举报
回复
private static System.Threading.Mutex mutex;
private static bool runone()
{
bool one;
mutex = new System.Threading.Mutex(true, "WindowsApplication2", out one);
return one;
}


用这个方法,每次都不能启动了
pelasido 2008-07-10
  • 打赏
  • 举报
回复
查一下MSDN 设置一下 Application 的一个属性即可;
wdgphc 2008-07-10
  • 打赏
  • 举报
回复
用Mutex 互斥!
aaajedll 2008-07-10
  • 打赏
  • 举报
回复
注冊表
贫僧又回来了 2008-07-10
  • 打赏
  • 举报
回复
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//查找相同名称的进程
foreach (Process process in processes)
{
//忽略当前进程
if (process.Id != current.Id)
{
//确认相同进程的程序运行位置是否一样.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
{
//Return the other process instance.
return process;
}
}
}
//No other instance was found, return null.
return null;
}
falx2004 2008-07-10
  • 打赏
  • 举报
回复
利用同斥体
如果不会 可以用简单点的 在运行exe之初就 写一个标识(注册表,或者在隐蔽角落写文件)
运行之后检查是否存在 这样的标识
ericzhangbo1982111 2008-07-10
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static int Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (runone())
Application.Run(new Form1
());
return 1;
}
private static System.Threading.Mutex mutex;
private static bool runone()
{
bool one;
mutex = new System.Threading.Mutex(true, "WindowsApplication2", out one);
return one;
}
}
}



2

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsApplication1
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static int Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Process[] ps=Process.GetProcessesByName("application.exe");
if (ps.Length==0)
{
Application.Run(new Form1
());
}

return 1;
}

}
}
falx2004 2008-07-10
  • 打赏
  • 举报
回复
同斥体
如果不会 可以在运行exe执行的时候 写注册表 或者在隐蔽角落写文件
然后检查是否存在
over
bbbbbb888888 2008-07-10
  • 打赏
  • 举报
回复
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
//检查程序是否已经运行
Process currentProcess = Process.GetCurrentProcess();
Process[] localByName = Process.GetProcessesByName(currentProcess.ProcessName);
if (localByName.Length > 1)
{
Application.Exit();
return;
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(FormMain.GetInstance());
}
gwang119 2008-07-10
  • 打赏
  • 举报
回复
已经解决了,这样就可以了。
        // 察看是否已有此程序在执行
private static bool runone()
{

Process current = Process.GetCurrentProcess();
Process[] ps = Process.GetProcessesByName(current.ProcessName);
if (ps.Length > 1)
return true;
return false;
}


要判断ps.Length > 1
huahanbing 2008-07-10
  • 打赏
  • 举报
回复
up
gwang119 2008-07-10
  • 打赏
  • 举报
回复
对于这个方法:
如果同一个aaa.exe,第一次执行会有一个Process运行;
第二次一旦再运行,在未执行
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);

之前,也会产生一个Process,这样的话,是不是就有两个同名的process?
此时,我想processes.length = 2,
这样认为对吗?

110,996

社区成员

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

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

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