C# 实现程序只启动一次(总结)
我前面的三篇文章是从网上找到的(如下链接),都说是实现程序只启动一次的功能。
C#防止程序多次运行
C#检测程序重复运行的函数(可以在多用户登录情况下检测)
C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
C# 实现程序只启动一次(实现程序自重启)
如果你已经读了前面的几篇文章,我相信你自己或许已经有答案了,我自己用下来感觉还是有一些区别的,现在把我总结的记录下来:
一:使用System.Threading.Mutex类
using (System.Threading.Mutex m = new System.Threading.Mutex(true, Application.ProductName, out createNew))
使用这个方法,我自己测试下来,在Windows的单一用户使用的时候可以使用,当多个Windows用户同时使用的时候则无法检测到程序是否在运行状态。
二:检查进程名的
Process[] processes = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
使用这个方法可以检查当前机器上的所有进程名称,多个用户也可以同时检测。但是如果程序改名运行,则无法检测到程序是否在运行状态。
三:使用API
API一:
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
API二:
[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
);
这个方法在我前面的文章中已经提到了两种API的使用
API一,可以使程序前端显示出来,并且获取为焦点。
API二,其实更像System.Threading.Mutex类,
因为在项目中暂时没有使用这些功能,所以没有太多的意见。
C# 实现程序只启动一次(总结)的更多相关文章
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- 【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
大部分的引导界面基本上都是千篇一律的,只要熟练掌握了一个,基本上也就没什么好说的了,要想实现应用程序只启动一次引导界面这样的效果,只要使用SharedPreferences类,就会让程序变的非常简单, ...
- C#winfrom中应用程序只启动一次代码
static class Program { private const int WS_SHOWNORMAL = 1; [DllImport("User32 ...
- (转)C#.NET WINFORM应用程序中控制应用程序只启动一次
原文地址 :http://www.cnblogs.com/emanlee/archive/2009/08/31/1557379.html using System; using System.Thre ...
- C# 实现程序只启动一次(实现程序自重启)
程序运行过程中,不能有多个实例运行,并且需要程序自己可以重启(重新运行),所以代码如果下代码: static void Main() { bool createNew; using (System.T ...
- C# 实现程序只启动一次(多次运行激活第一个实例,使其获得焦点,并在最前端显示)
防止程序运行多个实例的方法有多种,如:通过使用互斥量和进程名等.而我想要实现的是:在程序运行多个实例时激活的是第一个实例,使其获得焦点,并在前端显示. 主要用到两个API 函数: ShowWindow ...
- winfrom程序只启动一个exe进程
private static void KillProcess() { Process process1 = Process.GetCurrentProcess(); //获得当前计算机系统内某个进程 ...
- WinForm程序,实现只启动一个实例
前言:在我们做的软件中,当点击图标运行时,正常的需求是只需要启动一个软件的实例,这是非常重要的一点,不然就显得我们的软件非常的山寨,笔者在工作中经常遇到同事没有注意这一点,看是不重要,实则非常的重要, ...
- 如何让程序(如java Hello)只启动一次?
如何让程序(如java Hello)只启动一次? 摘自http://bbs.csdn.net/topics/50488704 总结一下,关于让Java程序只运行一个实例的问题,其实质是JVM之间通信的 ...
随机推荐
- 使用Kali Linux 破解无线网
用到的工具 airmon-ngairodump-ngaireplay-ngaircrack-ng 过程 123456789101112131415161718192021222324 root@lm: ...
- Github fork其他项目的分支与主干保持同步
Fork一个Repo Fork是一个复制的操作,当你Fork一个项目之后,你就有了在原项目的基础之上进行修改和扩展的权限. 通常情况下,Fork操作用于参与别人的项目(成为项目中的一员),或者以别人的 ...
- xml的servlet配置
内容如下 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="ht ...
- eclipse——jsp字体设置
步骤如下
- LeetCode第[7]题(Java):Reverse Integer 标签:数学
题目:Reverse Integer 难度:Easy 题目内容: Given a 32-bit signed integer, reverse digits of an integer. Note:A ...
- hackerrankWeek of Code 32
hackerrankWeek of Code 32 A.Duplication B.Fight the Monsters! C.Circular Walk D.Geometric Trick E.Ba ...
- 新东方雅思词汇---8.3、apt
新东方雅思词汇---8.3.apt 一.总结 一句话总结:本身为词根 adj. 恰当的:有…倾向的:灵敏的 本身为词根 英 [æpt] 美 [æpt] adj. 恰当的:有…倾向的:灵敏的 n. ...
- jquery二维码生成插件jquery.qrcode.js
插件描述:jquery.qrcode.js 是一个能够在客户端生成矩阵二维码QRCode 的jquery插件 ,使用它可以很方便的在页面上生成二维条码. 转载于:http://www.jq22.com ...
- cylance做的机器学习相关材料汇总
https://www.cylance.com/en_us/products/our-products/protect----threatzero.html 产品介绍 关键!!!! https://w ...
- WinForm 创建与读写配置文件
(转自:http://www.cnblogs.com/SkySoot/archive/2012/02/08/2342941.html) 1. 创建 app.config 文件: 右击项目名称,选择“添 ...