方法一:
namespace MyNameSpace
{
static class Program
{
[DllImport("Toolhelp.dll")]
public static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processid);
[DllImport("Toolhelp.dll")]
public static extern int Process32First(IntPtr handle, ref PROCESSENTRY32 pe);
[DllImport("Toolhelp.dll")]
public static extern int Process32Next(IntPtr handle, ref PROCESSENTRY32 pe);
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[MTAThread]
static void Main()
{
IntPtr handle = CreateToolhelp32Snapshot((uint)SnapShotFlags.TH32CS_SNAPPROCESS, );
int count = ;
if ((int)handle != -)
{
PROCESSENTRY32 pe32 = new PROCESSENTRY32();
pe32.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32));
int bMore = Process32First(handle, ref pe32);
while (bMore == )
{
if (pe32.szExeFile == "自己的程序名")
count++;
bMore = Process32Next(handle, ref pe32);
}
}
if (count > )
{
MessageBox.Show("程序已经运行!");
return;
}
else
Application.Run(new FrmLogin()); }
}
[StructLayout(LayoutKind.Sequential)]
public struct PROCESSENTRY32
{
public uint dwSize;
public uint cntUsage;
public uint th32ProcessID;
public IntPtr th32DefaultHeapID;
public uint th32ModuleID;
public uint cntThreads;
public uint th32ParentProcessID;
public int pcPriClassBase;
public uint dwFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = )]//注意,此处为宽字符
public string szExeFile;
public uint th32MemoryBase;
public uint th32AccessKey;
} public enum SnapShotFlags : uint
{
TH32CS_SNAPHEAPLIST = 0x00000001,
TH32CS_SNAPPROCESS = 0x00000002,
TH32CS_SNAPTHREAD = 0x00000004,
TH32CS_SNAPMODULE = 0x00000008,
TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE),
TH32CS_GETALLMODS = 0x80000000
} }
方法二:
采用第三方的类库:
OpenNETCF
官方网址:http://www.opennetcf.com
using OpenNETCF.Threading; namespace MyNameSpace
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[MTAThread]
static void Main()
{
bool firstInstance;
OpenNETCF.Threading.NamedMutex mutex = new OpenNETCF.Threading.NamedMutex(false, "自己起个名字", out firstInstance);
if (!firstInstance)
{
MessageBox.Show("程序已启动");
return;
} Application.Run(new FrmLogin());
GC.KeepAlive(mutex); }
} }