WinCe 如何使应用程序只开启一个

方法一:

复制代码
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, 0); int count = 0; if ((int)handle != -1) { PROCESSENTRY32 pe32 = new PROCESSENTRY32(); pe32.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32)); int bMore = Process32First(handle, ref pe32); while (bMore == 1) { if (pe32.szExeFile == "自己的程序名") count++; bMore = Process32Next(handle, ref pe32); } } if (count > 1) { 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 = 260)]//注意,此处为宽字符 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);

        }
    }


}
复制代码

 

posted @   Bin_x  阅读(480)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示