博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CLR Via CSharp读书笔记(1):CLR的执行模型
阅读量:5818 次
发布时间:2019-06-18

本文共 3633 字,大约阅读时间需要 12 分钟。

ch01-1-WinInstall.bat

@ECHO OFFREM The following directory is for .NET 2.0set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319set PATH=%PATH%;%DOTNETFX2%echo Installing WindowsService...echo ---------------------------------------------------InstallUtil /i "C:\Program Files (x86)\YourCompany\WinServiceFolder\WinServiceName.exe"echo ---------------------------------------------------pauseecho Done.

ch01-2-WinUnInstall.bat

@ECHO OFFREM The following directory is for .NET 2.0set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework\v4.0.30319set PATH=%PATH%;%DOTNETFX2%echo Installing WindowsService...echo ---------------------------------------------------InstallUtil /u "C:\Program Files (x86)\YourCompany\WinServiceFolder\WinServiceName.exe"echo ---------------------------------------------------pauseecho Done.

实现C#程序只允许运行一个实例的几种方法详解 

方法一:

使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.
把program.cs文件里的Main()函数改为如下代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace TempTest{    class Program    {        static void Main(string[] args)        {            bool runone;            Mutex run = new Mutex(true, "single_test", out runone);            if (runone) // 判断runone是关键            {                run.ReleaseMutex();                Console.WriteLine("My Temp Test");                Console.ReadLine();            }        }    }}

方法二:采用判断进程的方式,我们在运行程序前,查找进程中是否有同名的进程,同时运行位置也相同,如是没有运行该程序,如果有就就不运行.在C#中应用System.Diagnostics名字空间中的Process类来实现,

主要代码如下: 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;using System.Reflection;namespace TempTest{    class Program    {        static void Main(string[] args)        {            if (RunningInstance() == null)            {                Console.WriteLine("My Temp Test");                Console.ReadLine();            }        }        public static Process RunningInstance()        {            Process current = Process.GetCurrentProcess();            Process[] processes = Process.GetProcesses();            foreach (Process process in processes)            {                if (process.Id != current.Id) // 忽略当前进程                {                    if (Assembly.GetExecutingAssembly().Location.Replace("/", @"/") == current.MainModule.FileName)                    {                        return process; // 返回其他进程实例                    }                }            }            return null;        }    }}

方法三:全局原子法,创建程序前,先检查全局原子表中看是否存在特定原子A(创建时添加的),存在时停止创建,说明该程序已运行了一个实例;不存在则运行程序并向全局原子表中添加特定原子A;退出程序时要记得释放特定的原子A哦,不然要到关机才会释放。C#实现如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;using System.Reflection;namespace TempTest{    class Program    {        [System.Runtime.InteropServices.DllImport("kernel32.dll")]        public static extern UInt32 GlobalAddAtom(String lpString); //添加原子        [System.Runtime.InteropServices.DllImport("kernel32.dll")]        public static extern UInt32 GlobalFindAtom(String lpString); //查找原子        [System.Runtime.InteropServices.DllImport("kernel32.dll")]        public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom); //删除原子        static void Main(string[] args)        {            UInt32 aAtom = GlobalFindAtom("temp_test");            if (aAtom != 0) // 找到原子("temp_test")            {                return;            }            GlobalAddAtom("temp_test");            Console.WriteLine("My Temp Test");            Console.ReadLine();            GlobalDeleteAtom(aAtom);        }    }}

 

转载于:https://www.cnblogs.com/thlzhf/archive/2012/11/25/2787246.html

你可能感兴趣的文章
矩阵常用归一化
查看>>
Oracle常用函数总结
查看>>
【聚能聊有奖话题】Boring隧道掘进机完成首段挖掘,离未来交通还有多远?
查看>>
USNews大学排名遭美国计算机研究学会怒怼,指排名荒谬要求撤回
查看>>
七大关键数据 移动安全迎来历史转折点
查看>>
盘点物联网网关现有联网技术及应用场景
查看>>
mui 总结2--新建第一个app项目
查看>>
nginx的lua api
查看>>
考研太苦逼没坚持下来!看苑老师视频有点上头
查看>>
HCNA——RIP的路由汇总
查看>>
zabbix监控php状态(四)
查看>>
定时任务的创建
查看>>
实战Django:小型CMS Part2
查看>>
原创]windows server 2012 AD架构试验系列 – 16更改DC计算机名
查看>>
统治世界的十大算法
查看>>
linux svn安装和配置
查看>>
SSH中调用另一action的方法(chain,redirect)
查看>>
数据库基础
查看>>
表格排序
查看>>
关于Android四大组件的学习总结
查看>>