判断程序,只能开一次。

whcyl 2007-09-01 05:28:04
想写个程序,只能开一次,这样的需求的比如有QQ游戏(当然不考虑多开外挂)。
如果没有开的话,就可以直接开程序,如果开了的话不是提示“不能多开了”,而是跳到去显示已经开了的那个程序界面里面。
我知道可以利用判断进程。可是具体的实现还是有点迷糊,请大家帮帮,谢谢

...全文
325 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
a523194491 2008-05-28
  • 打赏
  • 举报
回复
写注册表和写文件都不可取,如果程序非法退出后标记没有取消,以后就可以不用运行了这个程序了,呵呵


破碎的脸 2008-05-28
  • 打赏
  • 举报
回复
晕,一堆解决办法,最简单的,就是开一个TCP或UDP端口,扔那里,管都不用管。。
破碎的脸 2008-05-28
  • 打赏
  • 举报
回复
晕,一堆解决办法,最简单的,就是开一个TCP或UDP端口,扔那里,管都不用管。。
benjerry 2008-05-28
  • 打赏
  • 举报
回复
可以考虑在旁边的xml文件或者ini文件中写一个标识,如果为某个特定值,则说明已打开,反之说明没有开
tigerleq 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 LeoMaya 的回复:]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace YourApplication
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()

[/Quote]
gaofenfei 2008-05-28
  • 打赏
  • 举报
回复
xuexi
c863123 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 LeoMaya 的回复:]
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace YourApplication
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()

[/Quote]
正解。。。
wang2034 2008-05-28
  • 打赏
  • 举报
回复
/// <summary>
/// SKSingleApplication 的摘要说明。
/// </summary>
public class SKSingleApplication
{
public SKSingleApplication()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

#region 静态私有变量
static Mutex m_LockKey;
#endregion 静态私有变量
#region 公共静态方法
/// <summary>
/// 单实例运行
///
/// </summary>
/// <param name="frmMain"></param>
///
public static void Run(Form frmMain, string lockKey)
{
if (IsLock(lockKey))
{
Application.ApplicationExit += new EventHandler(Application_ApplicationExit); Application.Run(frmMain);
}
else
{
MessageBox.Show("您已经启动了一套软件!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
#endregion 公共静态方法
#region 私有静态方法
/// <summary>
/// 是否已经锁定
/// </summary>
/// <returns></returns>
///
private static bool IsLock(string lockKey)
{
m_LockKey = new Mutex(false, lockKey);
bool bLocked = false;
bLocked = m_LockKey.WaitOne(TimeSpan.Zero, false);
return bLocked;
}
private static void Application_ApplicationExit(object sender, EventArgs e)
{
m_LockKey.ReleaseMutex();
m_LockKey.Close();
}
#endregion 私有静态方法
}
zjz8204 2008-05-28
  • 打赏
  • 举报
回复
怎么个消息法?可否说一下啊?

另外,可以用注册表建一个值,也可以在开启应用程序时看是否已有相应进程,若有就不再运行,若无就运行
富莱工作室 2007-09-03
  • 打赏
  • 举报
回复
程序一运行就创建一命名互斥体, 检测返回, 如果为现有, 程序即退出
joejan 2007-09-03
  • 打赏
  • 举报
回复
在线程里查有无你的程序.有就不再执行.
suxe 2007-09-03
  • 打赏
  • 举报
回复
private static bool IsProgramRuning()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//遍历正在有相同名字运行的例程
foreach (Process process in processes)
{
//忽略现有的例程
if (process.Id != current.Id)
{
//确保例程从EXE文件运行
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==
current.MainModule.FileName)
{
return true;
}
}
}

return false;
}
lovefootball 2007-09-03
  • 打赏
  • 举报
回复
http://blog.csdn.net/Knight94/archive/2006/03/16/625809.aspx

whcyl 2007-09-03
  • 打赏
  • 举报
回复
D
huing 2007-09-03
  • 打赏
  • 举报
回复
我用消息实现了,但也学习一下其它方法
极地_雪狼 2007-09-03
  • 打赏
  • 举报
回复
API中有一个函数
love_virus 2007-09-03
  • 打赏
  • 举报
回复
请参照 设计模式中的 单件模式
成都慢生活 2007-09-03
  • 打赏
  • 举报
回复
懒人方法:
打开程序时,写注册表,修改一个值,每次打开程序去找这个值并判断。
富莱工作室 2007-09-03
  • 打赏
  • 举报
回复
正解
LeoMaya 2007-09-03
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace YourApplication
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
bool vExists;
Mutex vMutex = new Mutex(false, "YourApplication", out vExists);
if (!vExists)
{
MessageBox.Show("程序已经启动!");
return;
}
else
{
vMutex.WaitOne();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
加载更多回复(3)

110,537

社区成员

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

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

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