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之间通信的 ...
随机推荐
- const修饰的常量 不能被直接修改 但是可以通过指针进行间接修改
大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过 ...
- 实验三 敏捷开发与XP实践 实验报告 20162305李昱兴
实验三 敏捷开发与XP实践 实验报告 20162305 一.什么是敏捷开发与XP 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法.敏捷开发以用户的需求进化为核 ...
- JavaWeb XML
1. XML详解 1.1. XML介绍 1.1.1. 什么是XML XML的全称为eXtensible Markup Language,译为可扩展标记语言.XML语法上和HTML比较相似,但HTML中 ...
- iOS字符串处理
拼接字符串 NSString* string; NSString* string1, string2; //方法1. string = [NSString initWithFormat:@" ...
- CA认证_demo
CA认证,即电子认证服务 [1] ,是指为电子签名相关各方提供真实性.可靠性验证的活动. 证书颁发机构(CA, Certificate Authority)即颁发数字证书的机构.是负责发放和管理数字 ...
- ELK分布式日志收集搭建和使用
大型系统分布式日志采集系统ELK全框架 SpringBootSecurity1.传统系统日志收集的问题2.Logstash操作工作原理3.分布式日志收集ELK原理4.Elasticsearch+Log ...
- 20165332实验一 Java开发环境的熟悉
实验一 Java开发环境的熟悉 一.Java开发环境的熟悉-1 1.实验要求: 0 参考实验要求: 1 建立"自己学号exp1"的目录 : 2 在"自己学号exp1&qu ...
- IE兼容性测试工具IETester
IE兼容性测试工具:IETester 1.这种做法,不能做到100%的覆盖: 2.实际的业务场景会比IEtester更符合.
- SVN与Git优缺点比较
1.SVN优缺点优点: 1. 管理方便,逻辑明确,符合一般人思维习惯. 2. 易于管理,集中式服务器更能保证安全性. 3. 代码一致性非常高. 4. 适合开发人数不多的项目开发. 缺点: 1. 服务器 ...
- python 2 3 读写中文文件 使用codecs最方便
codecs进行文件的读取 python给我们提供了一个包codecs进行文件的读取,这个包中的open()函数可以指定编码的类型: import codecs f = codecs.open('te ...