当前位置: 首页 > news >正文

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

  今次介绍一个应用程序单例唯一运行方案的代码。

  我们知道,有些应用程序在操作系统中需要单例唯一运行,因为程序多开的话会对程序运行效果有影响,最基本的例子就是打印机,只能运行一个实例。这里将笔者单例运行的代码共享出来,需要的读者请自己复用该代码到自己的项目中即可。

  1、  项目目录;

  下面是项目目录,因为是一段代码,所以给出的例子比较简单。

        

  2、  代码介绍;

  这里的代码挺简单的,就是获取应用程序的GUID和运行的进程进行判断,因为GUID唯一,所以更改了程序名称或者改变了目录都不会有影响;而运行进程判断是附加的方式,防止当前目录的程序运行多次。

 1 namespace ProgramInstance2 {3     using System;4     using System.Diagnostics;5     using System.Reflection;6     using System.Runtime.InteropServices;7     using System.Threading;8 9 
10     /// <summary>
11     /// 单例程序操作类
12     /// </summary>
13     internal class SingleInstance
14     {
15         /// <summary>
16         /// 程序是否运行
17         /// </summary>
18         /// <returns>true 程序已运行;false 程序未运行</returns>
19         internal static bool IsRunning(out Process process)
20         {
21             //如果判断全系统唯一,直接用下列方法;如果判断当前文件夹唯一,则将GUID判断去掉;
22             new Mutex(true, 
          new Guid(((GuidAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(),
            typeof(GuidAttribute))).Value).ToString("N"),
          out bool createdNew); 23 process = RunningInstance(); 24 return (!createdNew || (process != null)); 25 } 26 /// <summary> 27 /// 获取当前程序进程实例 28 /// </summary> 29 /// <returns>程序进程实例</returns> 30 private static Process RunningInstance() 31 { 32 Process currentProcess = Process.GetCurrentProcess(); 33 foreach (Process process in Process.GetProcessesByName(currentProcess.ProcessName)) 34 { 35 if ((process.Id != currentProcess.Id) &&
              (Assembly.GetExecutingAssembly().Location.Replace("/", @"\") == currentProcess.MainModule.FileName)) 36 { 37 return process; 38 } 39 } 40 return null; 41 } 42 } 43 }
 1 namespace SingleInstance2 {3     using System;4     using System.Diagnostics;5     using System.Runtime.InteropServices;6     using System.Windows.Forms;7 8     /// <summary>9     /// 程序类
10     /// </summary>
11     internal static class Program
12     {
13         [DllImport("User32.dll")]
14         private static extern bool SetForegroundWindow(IntPtr hWnd);
15         [DllImport("User32.dll")]
16         private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
17 
18         /// <summary>
19         /// 应用程序的主入口点
20         /// </summary>
21         [STAThread]
22         static void Main()
23         {
24             if (ProgramInstance.SingleInstance.IsRunning(out Process process))
25             {
26                 ShowWindowAsync(process.MainWindowHandle, 9 | 1);
27                 SetForegroundWindow(process.MainWindowHandle);
28 
29                 return;
30             }
31 
32 
33             Application.EnableVisualStyles();
34             Application.SetCompatibleTextRenderingDefault(false);
35 
36             Application.Run(new Form1());
37         }
38     }
39 }

  3、  运行截图;

  因为是代码段复用,所以这里不提供运行截图了。

  4、  源码下载;

  需要该例子代码的,请移步到下面链接进行下载:

  https://download.csdn.net/download/lzhdim/88158095

  上面介绍了C#编写的应用程序单例运行的例子,希望对有该需求的读者以帮助。后面会将笔者认为有用的代码段共享出来,让需要的读者进行代码段复用。

  注:如果需要应用程序多开(放到其它文件夹中,或者在当前文件夹中复制更改应用程序名称),请将GUID的判断去掉即可。

相关文章:

基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章

今次介绍一个应用程序单例唯一运行方案的代码。 我们知道&#xff0c;有些应用程序在操作系统中需要单例唯一运行&#xff0c;因为程序多开的话会对程序运行效果有影响&#xff0c;最基本的例子就是打印机&#xff0c;只能运行一个实例。这里将笔者单例运行的代码共享出来&…...

2023-08-07力扣今日二题

链接&#xff1a; 剑指 Offer 29. 顺时针打印矩阵 题意&#xff1a; 如题 解&#xff1a; 麻烦的简单题&#xff0c;具体操作类似走地图&#xff0c;使用一个长度四的数组表示移动方向 我这边的思路是如果按正常的方向没有路走了&#xff0c;那转向下一个方向一定有路&am…...

Spring接口ApplicationRunner的作用和使用介绍

在Spring框架中&#xff0c;ApplicationRunner接口是org.springframework.boot.ApplicationRunner接口的一部分。它是Spring Boot中用于在Spring应用程序启动完成后执行特定任务的接口。ApplicationRunner的作用是在Spring应用程序完全启动后&#xff0c;执行一些初始化任务或处…...

奶牛排队 java 思维题

&#x1f468;‍&#x1f3eb; 5133. 奶牛排队 题目描述 约翰的农场有 n n n 头奶牛&#xff0c;每一头奶牛都有一个正整数编号。 不同奶牛的编号不同。 现在&#xff0c;这 n n n 头牛按某种顺序排成一队&#xff0c;每头牛都拿出一张纸条写下了其前方相邻牛的编号以及其…...

uniapp 微信小程序 判断数据返回的是jpg还是pdf,以及pdf预览

<template> <view class"approval-notice"><block v-for"(imgItem, idx) in drivingLicense" :key"idx">//如果是非图片&#xff0c;那就走pdf预览<view class"pdf-item" v-if"Object.keys(thumbnail).incl…...

SpringBoot 的事务及使用

一、事务的常识 1、事务四特性&#xff08;ACID&#xff09; A 原子性&#xff1a;事务是最小单元,不可再分隔的一个整体。C 一致性&#xff1a;事务中的方法要么同时成功,要么都不成功,要不都失败。I 隔离性&#xff1a;多个事务操作数据库中同一个记录或多个记录时,对事务进…...

Android中的ABI

Android中的ABI ABI是Application Binary Interface的缩写。 ABI常表示两个程序模块之间的接口&#xff0c;且其中一个模块常为机器码级别的library或操作系统。 ABI定义了函数库的调用、应用的二进制文件&#xff08;尤其是.so&#xff09;如何运行在相应的系统平台上等细节…...

Python爬虫在用户行为模型构建中的应用与挑战

嗨&#xff0c;大家好&#xff01;作为一名专业的爬虫代理&#xff0c;我今天要和大家分享一些关于爬虫与人类行为分析的知识。在数字化时代&#xff0c;我们每天都在互联网上留下大量的数据痕迹&#xff0c;通过分析这些数据&#xff0c;我们可以理解用户行为、性偏好和需求&a…...

LangChain与大模型的学习

这里写目录标题 问题记录1、库的版本问题 实例记录1、公司名生成2 提示模板的使用3LLM Chain 参考资料 问题记录 1、库的版本问题 openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(hostapi.openai.com, port443): Max retries excee…...

C语言标准定义的32个关键字

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。 …...

PE半透明屏是怎么制造的?工艺、材料、应用

PE半透明屏是一种新型的屏幕材料&#xff0c;具有半透明的特点。 它由聚乙烯&#xff08;PE&#xff09;材料制成&#xff0c;具有良好的透明度和柔韧性。PE半透明屏广泛应用于建筑、广告、展览等领域&#xff0c;具有很高的市场潜力。 PE半透明屏的特点之一是其半透明性。 它…...

linux文本三剑客---grep,sed,awk

目录 grep 什么是grep&#xff1f; grep实例演示 命令参数&#xff1a; 案例演示&#xff1a; sed 概念&#xff1a; 常用选项&#xff1a; 案例演示&#xff1a; awk 概念&#xff1a; awk常用命令选项&#xff1a; awk变量&#xff1a; 内置变量 自定义变量 a…...

leaflet-uniapp 缩放地图的同时 显示当前缩放层级

记录实现过程&#xff1a; 需求为移动端用户在使用地图时&#xff0c;缩放地图的同时&#xff0c;可以获知地图此时缩放的级别。 效果图如下&#xff1a;此时缩放地图级别为13 map.on() 有对应的诸多行为 查看官网即可&#xff0c;这里根据需要为--zoomstart zoom zoomend 代…...

[Securinets CTF Quals 2023] Admin Service,ret2libc,One is enough

只作了3个pwn&#xff0c;第4个附件没下下来&#xff0c;第5个不会 Admin Service 这是个最简单的题&#xff0c;最后来弄出来。原来只是看过关于maps文件的&#xff0c;一直没什么印象。 题目一开始设置seccomp禁用execv等&#xff0c;看来是用ORW&#xff0c;然后建了个mm…...

计算机组成原理-笔记-第二章

二、第二章——数据的表示和运算 1、进位制度&#xff08;二进制、十进制&#xff09; 2、BCD码&#xff08;余三码、2421码&#xff09; 编码方式 功能 好处 弊处 BCD码 将每个十进制数码转换为4位二进制码 精度高&#xff0c;适合直接用于数码管或LED等显示设备 编码…...

mysql大量数据导入记要

需求描述 在工作中经历过两个项目要对数据库中的数据做大量数据的导出&#xff0c;转换和导入的工作。对于不涉及数据格式转换的导出导入工作&#xff0c;一般都是数据的备份。这个工作一般都由DBA搞定。对于要进行格式转换的工作&#xff0c;一般还是要由程序员参与。除非DBA…...

极狐GitLab 全新「价值流仪表盘」使用指南

本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Haim Snir 译者&#xff1a;极狐(GitLab) 市场部内容团队 GitLab / 极狐GitLab 价值流仪表盘的使用相对简单&#xff0c;这种可以定制化的仪表盘能够让决策者识别数字化转型进程中的趋势及机遇。 如果你已经在用 GitLab…...

通过logrotate实现nginx容器内日志按天存储

场景 最近底层api需要上集群&#xff0c;于是用nginx做了转发&#xff0c;但是随着时间的增长&#xff0c;nginx的日志越来越大&#xff0c;磁盘空间也顶不住了&#xff0c;于是需要对日志进行分割&#xff0c;由于nginx原生是不支持日志按天存储和分割的&#xff0c;网上也介…...

广东珠海电子行业导入MES系统需要注意什么

一、电子行业工厂的生产特征 1.高度自动化&#xff1a; 电子行业的生产车间大多采用高度自动化的生产设备制造工艺。自动化流水线能够实现高效、精准和连续的生产过程&#xff0c;提升产品完整性和生产率。 2.多样化和个性化定制需求&#xff1a; 电子产品市场的需求多样化&…...

小红书2023/08/06Java后端笔试 AK

T1&#xff08;模拟、哈希表&#xff09; #include <bits/stdc.h>using namespace std;typedef long long LL; typedef pair<string, int> PSI;const int N 1e5 10;void solve() {string line, t;getline(cin, line);line ;vector<PSI> ans;unordered_m…...

N_m3u8DL-CLI-SimpleG:跨平台M3U8视频下载工具全场景应用指南

N_m3u8DL-CLI-SimpleG&#xff1a;跨平台M3U8视频下载工具全场景应用指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 一、场景定位&#xff1a;用户能力与需求匹配模型 三级…...

RoboStudio6.08学习记录(1)

一.软件安装一、下载RobotStudio软件官方1. 请登陆网址&#xff1a;https://new.abb.com/products/robotics/robotstudio。2. 单击进入页面“下载RobotStudio软件”3. 单击填写信息后&#xff0c;可以获得下载链接二、安装RobotStudio软件1. 下载完成后&#xff0c;对压缩包进行…...

SAMD21 Turbo PWM:硬件级高精度同步PWM驱动详解

1. SAMD21 Turbo PWM 库深度解析&#xff1a;面向嵌入式工程师的高性能PWM驱动实践指南SAMD21 Turbo PWM 是一款专为基于 ATSAMD21G 微控制器&#xff08;如 Arduino Nano 33 IoT、Adafruit Itsy Bitsy M0、Trinket M0 等&#xff09;设计的底层硬件加速 PWM 库。它绕过 Arduin…...

Qwen3.5-35B-A3B-AWQ-4bit多模态落地:智慧医疗影像报告图关键指标自动提取

Qwen3.5-35B-A3B-AWQ-4bit多模态落地&#xff1a;智慧医疗影像报告图关键指标自动提取 1. 医疗影像分析的痛点与解决方案 医疗影像报告分析一直是临床工作中的重要环节。传统方式依赖医生人工查看影像并提取关键指标&#xff0c;存在以下问题&#xff1a; 效率低下&#xff…...

AST 是什么?费曼 + 大白话 + 画图,30 秒彻底懂

我用最简单、最形象、最不绕弯的方式给你讲清楚&#xff0c;保证你马上能听懂&#x1f447;一、AST 代码的骨架结构图全称&#xff1a;Abstract Syntax Tree 抽象语法树一句话&#xff1a;AST 就是把代码拆成逻辑结构&#xff0c;去掉所有标点、空格、格式&#xff0c;只保留 …...

MCP协议实战:用npx免安装部署文件系统服务的完整指南

MCP协议实战&#xff1a;用npx免安装部署文件系统服务的完整指南 在当今快速迭代的开发环境中&#xff0c;如何高效部署和管理文件系统服务成为许多开发者面临的挑战。传统方式往往需要全局安装各种工具包&#xff0c;不仅占用系统资源&#xff0c;还可能引发版本冲突。本文将带…...

OpenClaw+Qwen3.5-9B:法律文档审查助手实战

OpenClawQwen3.5-9B&#xff1a;法律文档审查助手实战 1. 为什么需要AI法律文档助手&#xff1f; 去年接手一个跨境合作项目时&#xff0c;我曾在72小时内手动审阅了137页的英文合同草案。那段经历让我意识到&#xff1a;传统人工审查不仅效率低下&#xff0c;还容易因疲劳遗…...

实战应用开发:基于快马平台构建集成heic转换功能的图片管理系统

最近在做一个图片管理系统的项目&#xff0c;其中遇到一个很实际的需求&#xff1a;用户上传的HEIC格式照片需要自动转换成通用的JPG格式。这个功能看似简单&#xff0c;但实际开发中需要考虑很多细节。下面分享下我在InsCode(快马)平台上实现这个功能的完整过程。 项目整体架构…...

敏捷还是瀑布?数字化项目的治理模式选择

敏捷还是瀑布&#xff1f;数字化项目的治理模式选择 项目背景&#xff1a;24年酒店PMS换系统和CRM上线。一、前言&#xff1a;当"稳定交付"遇上"快速迭代" 传统零售和酒店餐饮行业每年都要面对数十个数字化项目的治理决策。从ERP升级到会员中台建设&#x…...

OpenClaw+Phi-3-mini-128k-instruct低成本方案:自建文本生成流水线

OpenClawPhi-3-mini-128k-instruct低成本方案&#xff1a;自建文本生成流水线 1. 为什么选择本地部署Phi-3-mini-128k-instruct 去年我开始尝试用AI辅助写作时&#xff0c;发现商用API存在两个痛点&#xff1a;一是长文本生成成本高得惊人&#xff0c;二是某些敏感内容会被平…...