只运行一个应用程序的错误代码的分析

错误代码一

//单独单开exe的时候,是没有问题的//此代码的问题在于,打开两个或多个独立的VS程序后,并且这些VS打开的项目的名字相同的话,会有多个进程主模块名字相同,但是进程ID不同的程序    导致无法启动实例【一个程序都打不开】
Process current = Process.GetCurrentProcess();
                Process[] processes = Process.GetProcessesByName(current.ProcessName);
                OperationLog.Instance.WriteLog(
                    string.Format("进程Id={2} 进程名字 = {0},进程主模块的名字 = {1}",
                    current.ProcessName, current.MainModule.FileName, current.Id),
                    LogType.UI);
                OperationLog.Instance.WriteLog(string.Format("进程名字={0}的进程数量 = {0}", processes.Length), LogType.UI);
                OperationLog.Instance.WriteLog(
                    string.Format("System.Reflection.Assembly.GetExecutingAssembly().Location.Replace(\"/\", \"\\\") = {0}", System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/", "\\")),
                    LogType.UI);

                foreach (Process process in processes)
                {
                    OperationLog.Instance.WriteLog(
                        string.Format("process.Id = {0},process.MainModule.FileName = {1}",
                        process.Id, process.MainModule.FileName),
                        LogType.UI);
                    if (process.Id != current.Id)
                    {
                        if (process.MainModule.FileName == current.MainModule.FileName)
                        {
                            return process;
                        }
                    }
                }

                return null;
            }

错误代码二

//只打开exe的话,没问题//这个虽然解决错误代码一种关于多个VS程序,导致的不能运行程序的问题,【但是会导致,多个VS能打开多个程序】   并且调试运行处exe的时候,还可以从bin目录下直接打开exe
Process current = Process.GetCurrentProcess();
                Process[] processes = Process.GetProcessesByName(current.ProcessName);
                OperationLog.Instance.WriteLog(
                    string.Format("进程Id={2} 进程名字 = {0},进程主模块的名字 = {1}",
                    current.ProcessName, current.MainModule.FileName, current.Id),
                    LogType.UI);
                OperationLog.Instance.WriteLog(string.Format("进程名字={0}的进程数量 = {0}", processes.Length), LogType.UI);
                OperationLog.Instance.WriteLog(
                    string.Format("System.Reflection.Assembly.GetExecutingAssembly().Location.Replace(\"/\", \"\\\") = {0}", System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/", "\\")),
                    LogType.UI);

                foreach (Process process in processes)
                {
                    OperationLog.Instance.WriteLog(
                        string.Format("process.Id = {0},process.MainModule.FileName = {1}",
                        process.Id, process.MainModule.FileName),
                        LogType.UI);
                    if (process.Id != current.Id)
                    {
                        OperationLog.Instance.WriteLog(string.Format("System.Reflection.Assembly.GetExecutingAssembly().Location = {0}",
                            System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/", "\\")), LogType.UI);
                        if (System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)//只是区分了调试和非调试,能打开任意多个VS调试程序。并且还可以额外打开exe
                        {
                            return process;
                        }
                    }
                }
                OperationLog.Instance.WriteLog(string.Format("{0}",
                          Environment.NewLine+Environment.NewLine), LogType.UI);
                return null;

错误代码三

时间: 2024-10-29 04:44:22

只运行一个应用程序的错误代码的分析的相关文章

逆向学习XX客户端如何只运行一个实例

个人认为学习分两种, 一种是当面请教和直接从书本网络中的资料学习. 其二就是看着令你惊叹的作品-顿悟. 什么?顿悟不了?那我们就一起来逆向学习吧!差点忘了,我并不打算提供Demo,这并不重要,难道你打算遇到一个相同的情景?重在方法. 注意: 本文为了照顾新手人群,对于某些内容可能会非常详细的推演. 名词解释: 一个实例:一个对象,这里指一个程序被创建后在内存中的数量.大白话就是:成功运行了几次. 事由: 今天闲来无事(忙里偷闲)运行了两次Dr_COM的宽带认证客户端.如咱所料, 如图: 我们知道

多次单击快捷方式,只运行一个程序实例

在应用程序安装之后,单击一次快捷方式,就运行一个程序实例,对于资源独占型程序来说,这样是不可以的,比如该程序使用了当前系统的某个端口,当同样的程序再次运行,再次试图占用同一个端口次,会提示"端口已经被占用的"异常.如此,必须在启动应用程序时,必须判断该程序是否已经有一个实例在运行.下面这个类中先判断该程序的实例有没有在运行,使用线程同步类EventWaitHandle(Boolean, EventResetMode, String)及注册正在等待 WaitHandle 的委托方法Reg

用C#给程序加启动画面并只允许一个应用程序实例运行

1. 启动画面类: public class SplashForm : System.Windows.Forms.Form { private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label lbl_version; /// <summary> /// 必需的设计器变量. /// </summ

vc++高级班之窗口篇[4]---让程序只运行一个实例

大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是否已经设置了某些特定标志,是否创建了一些全局唯一的东西,或者让程序的多个实例都能看到的东西, 如果有则说明已经有一个实例在运行了,则当前程序通知用户如何如何,然后程序退出,当然方法有很多种,各有各的优缺点! ①.创建互斥体 Mutex 法: 但是单纯的使用互斥体的话不能取得已经创建的实例窗口局柄,因此无

WINCE程序只运行一个,防止多重运行。

在 winform中,程序只运行一个,防止多重运行,很容易.如用FindWindow.Mutex和C#直接Process遍历,都可以实现. 但是,到了WINCE 系统中,要么方法不存在,即使引入CreateMutex,也是白搭.根本无效. 从网上找到一篇通过系统快照方式的方案.不过,大侠们写的都不完整,我特地贡献一个可以直接使用的类: using System.IO; using System.Runtime.InteropServices; //可能还缺其他using,,,,没仔细看. pub

只运行一个实例以及内存泄漏检测

unit 使应用程序只运行一个实例; interface uses Windows; const  // - 互斥体唯一的名字  _Mutex_Name = '{19631971-1976-1981-1989-199319941995}'; var  _Mutex_Handle: THandle; implementation initialization // - 载入时调用的代码 // - 创建互斥体对象_Mutex_Handle := CreateMutex(nil, False, LPC

HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo

26 集群使用初步 HDFS的设计思路 l 设计思想 分而治之:将大文件.大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析: l 在大数据系统中作用: 为各类分布式运算框架(如:mapreduce,spark,tez,--)提供数据存储服务 l 重点概念:文件切块,副本存放,元数据 26.1 HDFS使用 1.查看集群状态 命令:   hdfs  dfsadmin –report 可以看出,集群共有3个datanode可用 也可打开web控制台查看HDFS集群

用命名事件对象来实现只运行一个实例

1.添加CWinApp派生类的成员变量 HANDLE _hEvent; 2.在InitInstance中创建命名事件对象,并设置为有信号状态 //创建事件对象,可用命名事件对象来控制只运行一个实例     _hEvent=CreateEvent(NULL,                                              FALSE,                                  //TRUE人工重置,FALSE 自动重置               

mono for Android 环境配置(环境搭建+破解方法+运行一个小程序)

一.准备工作:下载相关软件工具,为搭建环境做准备. 哎!百度网盘无法分享,根据名称下载. 二.首先安装 jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008 这里选择安装jdk6,网上看到一篇文章说jdk7及以上,mono还没有支持,但是那篇文字一年前写的,目前 支不支持,不清楚.这里保险起见,安装jdk6,mono是支持的.    注意环境变量的配置,这里不详细描述.主要配置java_home,path,class_path. 三.安装mono-2.1