zoukankan      html  css  js  c++  java
  • 【Wince-禁止重复启动程序】Wince 不重复启动程序

    创建类Mutex.cs:

    using System;
    using System.Linq;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    
    namespace Demo
    {
        public class Mutex
        {
            [DllImport("coredll.dll", EntryPoint = "CreateMutex", SetLastError = true)]
            public static extern IntPtr CreateMutex(
            IntPtr lpMutexAttributes,
            bool InitialOwner,
            string MutexName);
    
            [DllImport("coredll.dll", EntryPoint = "ReleaseMutex", SetLastError = true)]
            public static extern bool ReleaseMutex(IntPtr hMutex);
    
            private const int ERROR_ALREADY_EXISTS = 0183;
    
            /// <summary>
            /// 判断程序是否已经运行
            /// </summary>
            /// <returns>
            /// true: 程序已运行
            /// false: 程序未运行
            /// </returns>
            public static bool IsExist()
            {
                string strAppName =
                System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
                IntPtr hMutex = CreateMutex(IntPtr.Zero, true, strAppName);
                if (hMutex == IntPtr.Zero)
                    throw new ApplicationException("Failure creating mutex: "
                    + Marshal.GetLastWin32Error().ToString("X"));
    
                if (Marshal.GetLastWin32Error() == ERROR_ALREADY_EXISTS)
                {
                    ReleaseMutex(hMutex);
                    return true;
                }
                return false;
            }
        }
    }

    Programs.cs启动:

    using System;
    using System.Linq;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.IO;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using System.Threading;
    
    namespace Demo
    {
        static class Program
        {
    
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [MTAThread]
            static void Main()
            {
                if (Mutex.IsExist())
                {
                    MessageBox.Show("纸头管理程序已经启动.");
                }
                else
                {
                    try
                    {
    
                        System.Windows.Forms.Application.Run(new FrmMain());
                    }
                    finally
                    {
                        System.Diagnostics.Process.GetCurrentProcess().Kill();
                    }
    
                }
    
            }
        }
    }
  • 相关阅读:
    iOS汇编系列-汇编入门
    C开发系列-指针
    iOS开发系列-LLVM、Clang
    java开发系列-Http协议
    iOS开发系列-SQLite
    iOS逆向系列-theos
    <Java><类加载机制><反射>
    <Java><!!!><面试题>
    <Java><修饰符>
    <Java><类与对象><OOP>
  • 原文地址:https://www.cnblogs.com/Sukie-s-home/p/6529831.html
Copyright © 2011-2022 走看看