亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#防止多次運行代碼收集分享

2020-01-24 03:09:34
字體:
來源:轉載
供稿:網友

方法一

class Program  {    [STAThread]    static void Main(string[] args)    {      //防止程序多次運行      if (!OneInstance.IsFirst("MyTest"))      {        Console.WriteLine("警告:程序正在運行中! 請不要重復打開程序!可在右下角系統欄找到!");        return;      }      Console.WriteLine("正在運行中");      Console.ReadLine();    }  }  public static class OneInstance  {    ///<summary>    ///判斷程序是否正在運行     ///</summary>    ///<param name="appId">程序名稱</param>    ///<returns>如果程序是第一次運行返回True,否則返回False</returns>    public static bool IsFirst(string appId)    {      bool ret = false;      if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)      {        CreateMutex(IntPtr.Zero, 0, appId);        ret = true;      }      return ret;    }    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]    private static extern IntPtr OpenMutex(      uint dwDesiredAccess, // access       int bInheritHandle,  // inheritance option       string lpName     // object name       );    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]    private static extern IntPtr CreateMutex(      IntPtr lpMutexAttributes, // SD       int bInitialOwner,            // initial owner       string lpName              // object name       );  }

方法二

string MnName = Process.GetCurrentProcess().MainModule.ModuleName; //返回不具有擴展名的制定路徑字符串的文件名String Pname = Path.GetFileNameWithoutExtension(MnName);Process[] myprocess = Process.GetProcessesByName(Pname);if (myprocess.Length > 1){  MessageBox.Show("yici", "tishi", MessageBoxButtons.OK, MessageBoxIcon.Information);}else{  //Application.EnableVisualStyles();  ////Application.SetCompatibleTextRenderingDefault(false);  //Application.Run(new Form1());}

方法三

原文如下(//www.49028c.com/article/41179.htm

經常我們會有這樣的需求,只讓應用程序運行一個實體。通常我們的情況是,雙擊一個exe文件,就運行一個程序的實體,再雙擊一次這個exe文件,又 運行這個應用程序的另一個實體。就拿QQ游戲來說吧,一臺電腦上一般只能運行一個QQ游戲大廳(不過以前聽說過有雙開的外掛)。

那我們的程序也能像QQ游戲那里禁止多次啟動嗎,答案是可以的,下面介紹下一個簡單的實現方法,那就是Mutex(互斥)。

      Mutex(mutual exclusion,互斥)是.Net Framework中提供跨多個線程同步訪問的一個類。它非常類似了Monitor類,因為他們都只有一個線程能擁有鎖定。而操作系統能夠識別有名稱的互 斥,我們可以給互斥一個唯一的名稱,在程序啟動之前加一個這樣的互斥。這樣每次程序啟動之前,都會檢查這個命名的互斥是否存在。如果存在,應用程序就退 出。

static class Program  {    /// <summary>    /// The main entry point for the application.    /// </summary>    [STAThread]    static void Main()    {      bool createdNew;      //系統能夠識別有名稱的互斥,因此可以使用它禁止應用程序啟動兩次      //第二個參數可以設置為產品的名稱:Application.ProductName      //每次啟動應用程序,都會驗證名稱為SingletonWinAppMutex的互斥是否存在      Mutex mutex = new Mutex(false, "SingletonWinAppMutex", out createdNew);            //如果已運行,則在前端顯示      //createdNew == false,說明程序已運行      if (!createdNew)      {        Process instance = GetExistProcess();        if (instance != null)        {          SetForegroud(instance);          Application.Exit();          return;        }      }      Application.EnableVisualStyles();      Application.SetCompatibleTextRenderingDefault(false);      Application.Run(new MainForm());    }    /// <summary>    /// 查看程序是否已經運行    /// </summary>    /// <returns></returns>    private static Process GetExistProcess()    {      Process currentProcess = Process.GetCurrentProcess();      foreach (Process process in Process.GetProcessesByName(currentProcess.ProcessName))      {        if ((process.Id != currentProcess.Id) &&           (Assembly.GetExecutingAssembly().Location == currentProcess.MainModule.FileName))        {          return process;        }      }      return null;    }    /// <summary>    /// 使程序前端顯示    /// </summary>    /// <param name="instance"></param>    private static void SetForegroud(Process instance)    {      IntPtr mainFormHandle = instance.MainWindowHandle;      if (mainFormHandle != IntPtr.Zero)      {        ShowWindowAsync(mainFormHandle, 1);        SetForegroundWindow(mainFormHandle);      }    }    [DllImport("User32.dll")]    private static extern bool SetForegroundWindow(IntPtr hWnd);    [DllImport("User32.dll")]    private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);  }

經過我的測試,還比較好用,但是有個問題,如果不注銷,用另一個用戶進入,則程序不能判斷出已運行。所以只限于用在單用戶環境,還是不太完美。

class Program  {    [STAThread]    static void Main(string[] args)    {      //防止程序多次運行      if (!OneInstance.IsFirst("MyTest"))      {        Console.WriteLine("警告:程序正在運行中! 請不要重復打開程序!可在右下角系統欄找到!");        return;      }      Console.WriteLine("正在運行中");      Console.ReadLine();    }  }  public static class OneInstance  {    ///<summary>    ///判斷程序是否正在運行     ///</summary>    ///<param name="appId">程序名稱</param>    ///<returns>如果程序是第一次運行返回True,否則返回False</returns>    public static bool IsFirst(string appId)    {      bool ret = false;      if (OpenMutex(0x1F0001, 0, appId) == IntPtr.Zero)      {        CreateMutex(IntPtr.Zero, 0, appId);        ret = true;      }      return ret;    }    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]    private static extern IntPtr OpenMutex(      uint dwDesiredAccess, // access       int bInheritHandle,  // inheritance option       string lpName     // object name       );    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]    private static extern IntPtr CreateMutex(      IntPtr lpMutexAttributes, // SD       int bInitialOwner,            // initial owner       string lpName              // object name       );  }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲黄色在线观看| 亚洲精品视频网上网址在线观看| 精品国产区一区二区三区在线观看| 欧美怡春院一区二区三区| 欧美裸体xxxx极品少妇软件| 亲爱的老师9免费观看全集电视剧| 日韩麻豆第一页| 亚洲最大激情中文字幕| 日韩电影在线观看中文字幕| 综合av色偷偷网| 亲爱的老师9免费观看全集电视剧| 一个人看的www欧美| 色综久久综合桃花网| 奇门遁甲1982国语版免费观看高清| 91精品视频大全| 欧美高清在线视频观看不卡| 欧美成人一区二区三区电影| 亚洲欧美激情在线视频| 欧美一级电影在线| 韩剧1988免费观看全集| 色妞一区二区三区| 亚洲成人av在线播放| 国产精品高清免费在线观看| 欧美日韩国产丝袜另类| 福利微拍一区二区| 成人国产精品免费视频| 欧美一区二区三区图| 亚洲桃花岛网站| 久久久精品国产| 国产精品jvid在线观看蜜臀| 欧美人成在线视频| 高清一区二区三区四区五区| 成人美女av在线直播| 日韩欧美在线视频免费观看| 亚洲免费视频一区二区| 欧美国产日韩视频| 国内伊人久久久久久网站视频| 国产日韩欧美成人| 欧美日韩在线视频一区二区| 国产精品自拍偷拍视频| 国产视频一区在线| 亚洲aⅴ日韩av电影在线观看| 欧美第一黄色网| 国产精品永久免费视频| 播播国产欧美激情| 日韩小视频在线| 国产精品爽爽爽爽爽爽在线观看| 欧美激情亚洲自拍| 欧美黑人国产人伦爽爽爽| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品www色诱视频| 欧美国产日韩免费| 伊人成人开心激情综合网| 欧美激情中文网| 国产91ⅴ在线精品免费观看| 亚洲人成网站777色婷婷| 国产精品久久视频| 亚洲自拍偷拍网址| 97视频免费在线看| 国产香蕉精品视频一区二区三区| 91欧美精品午夜性色福利在线| 亚洲韩国欧洲国产日产av| 久久91精品国产91久久跳| 欧美精品videos另类日本| 日本欧美国产在线| 97视频在线播放| 中文字幕在线视频日韩| 日本一区二区不卡| 亚洲欧美一区二区三区久久| 日韩美女视频免费在线观看| 国产视频精品xxxx| 日日噜噜噜夜夜爽亚洲精品| 亚洲国产成人在线播放| 粉嫩av一区二区三区免费野| 色妞在线综合亚洲欧美| 欧美国产日韩免费| 日韩成人在线视频观看| 福利微拍一区二区| 永久免费毛片在线播放不卡| 亚洲一区二区中文字幕| 亚洲成人激情在线观看| 午夜精品99久久免费| 亚洲国产欧美在线成人app| 午夜欧美不卡精品aaaaa| 欧美日韩中文字幕在线视频| 免费97视频在线精品国自产拍| 亚洲欧洲国产一区| 亚洲日韩中文字幕在线播放| 日韩三级影视基地| 亚洲欧洲一区二区三区在线观看| www.欧美三级电影.com| 欧美激情视频一区二区| 亚洲国产99精品国自产| 中文字幕无线精品亚洲乱码一区| 欧美另类老肥妇| 韩剧1988免费观看全集| 91亚洲精品久久久久久久久久久久| 91社影院在线观看| 亚洲综合一区二区不卡| 2019最新中文字幕| 欧美在线视频网| 久久亚洲精品小早川怜子66| 欧美亚洲激情在线| 亚洲天堂影视av| 国产精品久久久久久久久久| 久久久免费精品| 色偷偷综合社区| 欧美性受xxx| 91色在线视频| 7777精品视频| 午夜精品久久久久久久99热| 日韩精品视频在线播放| 国产精品久久久久久久久久小说| 91在线视频导航| 久久影院中文字幕| 国产精品久久99久久| 国产成+人+综合+亚洲欧美丁香花| 国内偷自视频区视频综合| 色婷婷综合成人av| 在线看日韩av| 亚洲乱码av中文一区二区| 91tv亚洲精品香蕉国产一区7ujn| 国产精品自拍小视频| 国产精品久久久久久久午夜| 国产视频丨精品|在线观看| 91精品国产成人www| 亚洲大胆人体视频| 久久亚洲精品毛片| 91精品国产色综合| 欧美日本高清视频| 91中文精品字幕在线视频| 91久久国产精品| 国产精品福利在线观看网址| 91理论片午午论夜理片久久| 一本一本久久a久久精品牛牛影视| 亚洲一区二区久久久| 国产精品专区一| 亚洲精品电影在线观看| 国产丝袜一区二区| 奇米4444一区二区三区| 伊人久久男人天堂| www.亚洲免费视频| 欧美大片免费看| 狠狠久久五月精品中文字幕| 国产一区二区三区久久精品| 精品成人av一区| 亚洲精品国产免费| 97在线精品视频| 日韩视频在线免费观看| 久久视频精品在线| 懂色aⅴ精品一区二区三区蜜月| 久久国产精彩视频| 成人免费视频xnxx.com| 成人观看高清在线观看免费| 欧美黄色小视频| 精品久久中文字幕| 日本视频久久久| 亚州av一区二区| 中文字幕亚洲激情| 久久影院在线观看| 欧美国产日韩免费| 久久99热精品这里久久精品| 久久久久久香蕉网| 91在线视频精品|