如何实现只让一个程序运行一次,在它运行时,不允许再启动一个新的进程。我的系统是WINDOWS2003,用的环境是。NET 2003, VC#
解决方案 »
- 用listview插入一首诗,再用formview读取显示的时候就没有诗的格式了,请问这是什么原因啊?
- 一个.Net 程序集 如何知道自己是被x86或x64的应用调用?
- .net生成静态网页
- 一个小问题 关于保存picturebox内容为图像的问题
- 这是怎么回事?
- 求助:我将两个bindingsource的datasource设为一个datatable.
- 用企业邮箱发送邮件出现问题
- System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
- 登录窗口的复杂应用,问题比较复杂,希望大家都来看看!!!
- IIS重装不能使用问题!!!!!!!!!!!!今天结帖
- 建立和使用WEB用户控件
- 怎样用SHChangeNotifyRegister监视驱动器改动,各位大虾请进来看看
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
using System.Reflection;public class OneInstnace
{
[STAThread]
public static void Main()
{
//得到正在运行的例程
Process instance = RunningInstance();
if (instance == null)
{
//如果没有其它例程,就新建一个窗体
Application.Run (new Form());
}
else
{
//处理发现的例程
HandleRunningInstance(instance);
}
}
public static Process RunningInstance()
{
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 process;
}
}
} //没有其它的例程,返回Null
return null;
} public static void HandleRunningInstance(Process instance)
{
//确保窗口没有被最小化或最大化
ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL); //设置真实例程为foreground window
SetForegroundWindow (instance.MainWindowHandle);
} [DllImport("User32.dll")] private static extern bool ShowWindowAsync(
IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")] private static extern bool
SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
}
//判断互斥体是否使用中。
bool Running = !mutex.WaitOne(0, false);
if (! Running)
{
Application.Run(new Form1());
}
else
{
MessageBox.Show("应用程序已经启动!");
}
http://blog.csdn.net/dahuzizyd/articles/55411.aspx
static void Main()
{
int ProceedingCount = 0;
Process[] ProceddingCon = Process.GetProcesses();
foreach(Process IsProcedding in ProceddingCon) {
if(IsProcedding.ProcessName == Process.GetCurrentProcess().ProcessName) {
ProceedingCount += 1;
}
}
if(ProceedingCount > 1) {
MessageBox.Show("该系统已经在运行中。","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
else {
Application.EnableVisualStyles();
Application.DoEvents();
Application.Run(new MainFrm());
}
}
[STAThread]
public static void Main(string[] args)
{
//声明互斥体。
Mutex mutex = new Mutex(false, "ThisShouldOnlyRunOnce");
//判断互斥体是否使用中。
bool Running = !mutex.WaitOne(0, false);
if (! Running)
Application.Run(new FormLogin());
else
MessageBox.Show("应用程序已经启动!");
}