兄弟们,小弟有一问题恭请各位高人进来指点,加以讨论,把这一问题搞清楚,先谢过 兄弟们,我写了一个应用程序,编译成exe文件,然后我在另一个应用程序中需要调用这个exe,但我在调用前需要判断这个exe程序是否已经在运行,如果已经在运行,我便不让这个exe程序运行了,如果没有运行,便启动这个exe程序,这在C#下面如何做?? 哪位高人指点一二,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 判断系统中是否存在这个进程,如果存在,则激活,否则则启动up ~up ~up ~up 如何得到我机器上所有正在运行的进程?http://dotnet.aspx.cc/ShowDetail.aspx?id=58E736CF-02A3-45CD-AE43-35888276017C在ASP.NET中杀死进程http://dotnet.aspx.cc/ShowDetail.aspx?id=299D1529-59A3-42F9-77A7-7BF353754FEA 方法1:主要应用System.Diagnostics名字空间中的Process类来实现思路,我们在运行程序前,查找进程中是否有同名的进程,同时运行位置也相同,如是没有运行该程序,如果有,就将同名的同位置的程序窗口置前.主要代码: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; } 方法2:可以使用互斥体Mutex类型完成此功能。见如下代码: [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("应用程序已经启动!"); }看看这个是不是合适 参照一个程序只运行一个实例的实现,ApplicationStart.cs 文件=========================================using System;using System.Diagnostics;using System.Windows.Forms;using System.Reflection;using System.Runtime.InteropServices;using Zhzuo.WinGui;namespace Zhzuo{ /// <summary> /// AppStart 的摘要说明。 /// </summary> public class ApplicationStart { private const int WS_SHOWNORMAL = 1; [DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Process instance = GetRunningInstance(); if(instance == null) { //初始化程序配置信息 //ApplicationSettings.Initialize(); Application.Run(new MainForm()); } else { HandleRunningInstance(instance); } } /// <summary> /// 获取应用程序的实例,没有其它的例程,返回Null /// </summary> /// <returns></returns> public static Process GetRunningInstance() { 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; } return null; } /// <summary> /// 获取窗口句柄 /// </summary> /// <param name="instance"></param> public static void HandleRunningInstance(Process instance) { //确保窗口没有被最小化或最大化 ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL); //设置真实例程为foreground window SetForegroundWindow (instance.MainWindowHandle); } }} 在delphi里可以创建一个互斥体对象,这是全局的然后另一个程序运行时就可以判断了 感觉还是不行啊,上面的兄弟们提供的方法,好像是一个应用程序自身启动时进行判断,我想要这样,假如有两个应用程序a和b,a调用执行b,在调用之前判断b是否已经执行,如果执行,则不判断,如果没有执行,则调用执行b。哪位还有高见? 参照一个程序只运行一个实例的实现,ApplicationStart.cs 文件=========================================using System;using System.Diagnostics;using System.Windows.Forms;using System.Reflection;using System.Runtime.InteropServices;using Zhzuo.WinGui;namespace Zhzuo{ /// <summary> /// AppStart 的摘要说明。 /// </summary> public class ApplicationStart { private const int WS_SHOWNORMAL = 1; [DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Process instance = GetRunningInstance(); if(instance == null) { //初始化程序配置信息 //ApplicationSettings.Initialize(); Application.Run(new MainForm()); } else { HandleRunningInstance(instance); } } /// <summary> /// 获取应用程序的实例,没有其它的例程,返回Null /// </summary> /// <returns></returns> public static Process GetRunningInstance() { 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; } return null; } /// <summary> /// 获取窗口句柄 /// </summary> /// <param name="instance"></param> public static void HandleRunningInstance(Process instance) { //确保窗口没有被最小化或最大化 ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL); //设置真实例程为foreground window SetForegroundWindow (instance.MainWindowHandle); } }}参照一个程序只运行一个实例的实现,ApplicationStart.cs 文件=========================================using System;using System.Diagnostics;using System.Windows.Forms;using System.Reflection;using System.Runtime.InteropServices;using Zhzuo.WinGui;namespace Zhzuo{ /// <summary> /// AppStart 的摘要说明。 /// </summary> public class ApplicationStart { private const int WS_SHOWNORMAL = 1; [DllImport("User32.dll")] private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Process instance = GetRunningInstance(); if(instance == null) { //初始化程序配置信息 //ApplicationSettings.Initialize(); Application.Run(new MainForm()); } else { HandleRunningInstance(instance); } } /// <summary> /// 获取应用程序的实例,没有其它的例程,返回Null /// </summary> /// <returns></returns> public static Process GetRunningInstance() { 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; } return null; } /// <summary> /// 获取窗口句柄 /// </summary> /// <param name="instance"></param> public static void HandleRunningInstance(Process instance) { //确保窗口没有被最小化或最大化 ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL); //设置真实例程为foreground window SetForegroundWindow (instance.MainWindowHandle); } }} C# 网页中怎么及时获取数据库中插入的数据 关于Process类的问题..~~>_<~~ 请问各位大侠怎么把键盘上的“这个字符转换到文本框? C#怎么学习 关于WMI调用WINDOWS SERVICE的一个小问题 Asp.net2005不用Ajax实现无刷新验证用户名、密码和中文验证码,(附源码) 怎么根据应用来估算服务器配置要求? checkbox选择问题 怎样得到ListView中的数据.. 如何实现.net的菜单的效果? 关于combobox可编辑属性的设置 急,100分求,如何实现这样的功能!!!
http://dotnet.aspx.cc/ShowDetail.aspx?id=58E736CF-02A3-45CD-AE43-35888276017C
在ASP.NET中杀死进程
http://dotnet.aspx.cc/ShowDetail.aspx?id=299D1529-59A3-42F9-77A7-7BF353754FEA
主要应用System.Diagnostics名字空间中的Process类来实现
思路,我们在运行程序前,查找进程中是否有同名的进程,同时运行位置也相同,如是没有运行该程序,如果有,就将同名的同位置的程序窗口置前.主要代码:
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;
}
方法2:可以使用互斥体Mutex类型完成此功能。见如下代码:
[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("应用程序已经启动!");
}
看看这个是不是合适
ApplicationStart.cs 文件
=========================================
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;using Zhzuo.WinGui;namespace Zhzuo
{
/// <summary>
/// AppStart 的摘要说明。
/// </summary>
public class ApplicationStart
{
private const int WS_SHOWNORMAL = 1;
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Process instance = GetRunningInstance();
if(instance == null)
{
//初始化程序配置信息
//ApplicationSettings.Initialize();
Application.Run(new MainForm());
}
else
{
HandleRunningInstance(instance);
}
}
/// <summary>
/// 获取应用程序的实例,没有其它的例程,返回Null
/// </summary>
/// <returns></returns>
public static Process GetRunningInstance()
{
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;
}
return null;
}
/// <summary>
/// 获取窗口句柄
/// </summary>
/// <param name="instance"></param>
public static void HandleRunningInstance(Process instance)
{
//确保窗口没有被最小化或最大化
ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);
//设置真实例程为foreground window
SetForegroundWindow (instance.MainWindowHandle);
}
}
}
我想要这样,假如有两个应用程序a和b,a调用执行b,在调用之前判断b是否
已经执行,如果执行,则不判断,如果没有执行,则调用执行b。哪位还有高见?
ApplicationStart.cs 文件
=========================================
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;using Zhzuo.WinGui;namespace Zhzuo
{
/// <summary>
/// AppStart 的摘要说明。
/// </summary>
public class ApplicationStart
{
private const int WS_SHOWNORMAL = 1;
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Process instance = GetRunningInstance();
if(instance == null)
{
//初始化程序配置信息
//ApplicationSettings.Initialize();
Application.Run(new MainForm());
}
else
{
HandleRunningInstance(instance);
}
}
/// <summary>
/// 获取应用程序的实例,没有其它的例程,返回Null
/// </summary>
/// <returns></returns>
public static Process GetRunningInstance()
{
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;
}
return null;
}
/// <summary>
/// 获取窗口句柄
/// </summary>
/// <param name="instance"></param>
public static void HandleRunningInstance(Process instance)
{
//确保窗口没有被最小化或最大化
ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);
//设置真实例程为foreground window
SetForegroundWindow (instance.MainWindowHandle);
}
}
}
参照一个程序只运行一个实例的实现,
ApplicationStart.cs 文件
=========================================
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;using Zhzuo.WinGui;namespace Zhzuo
{
/// <summary>
/// AppStart 的摘要说明。
/// </summary>
public class ApplicationStart
{
private const int WS_SHOWNORMAL = 1;
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Process instance = GetRunningInstance();
if(instance == null)
{
//初始化程序配置信息
//ApplicationSettings.Initialize();
Application.Run(new MainForm());
}
else
{
HandleRunningInstance(instance);
}
}
/// <summary>
/// 获取应用程序的实例,没有其它的例程,返回Null
/// </summary>
/// <returns></returns>
public static Process GetRunningInstance()
{
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;
}
return null;
}
/// <summary>
/// 获取窗口句柄
/// </summary>
/// <param name="instance"></param>
public static void HandleRunningInstance(Process instance)
{
//确保窗口没有被最小化或最大化
ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);
//设置真实例程为foreground window
SetForegroundWindow (instance.MainWindowHandle);
}
}
}