.net利用程序集的GUID解决程序只能运行一次的问题

可以解决同名的程序集(但非同一程序集)只能运行一次的问题,网上很资料都是只检测程序是否同名,不能真正的保证是同一程序集。

private bool prevInstance()
{
Process[] myProcesses= Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
if (myProcesses.Length > 1)
{
GuidAttribute curGuid = (GuidAttribute)(Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), false)[0]);
foreach (Process process in myProcesses)
{
if (Process.GetCurrentProcess().Id != process.Id)
{
Assembly ass = Assembly.LoadFrom(process.MainModule.FileName);
GuidAttribute[] guids = (GuidAttribute[])ass.GetCustomAttributes(typeof(GuidAttribute), false);
if (guids.Length > 0)
{
if (curGuid.Value.ToString().Equals(guids[0].Value.ToString()))
return true;
}
}
}
}
return false;

}

.net利用程序集的GUID解决程序只能运行一次的问题

时间: 2024-10-10 04:30:56

.net利用程序集的GUID解决程序只能运行一次的问题的相关文章

C#限制程序只能运行一個实例 (防多开)

//方法一:只禁止多个进程运行 using System; using System.Collections.Generic; using System.Windows.Forms; namespace DuoYeMianIE { static class Program { /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { bool ret; System.Threading.

如何利用 JConsole观察分析Java程序的运行,进行排错调优(转)

如何利用 JConsole观察分析Java程序的运行,进行排错调优 博客分类: JAVA JavaOracleSUNEclipseJDK 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码. 二.如何启动JConsole 如果是从命令行启

WinForm限制客户程序只能运行一个实例

WinForm限制客户程序只能运行一个实例: using System; using System.Threading; static void Main() { bool create = false; using (Mutex mu = new Mutex(true, Application.ProductName, out create)) { if (create) { Application.Run( new MainForm() ); } else { MessageBox.Show

利用共享内存映射实现程序只能启动一次的限制

//============================================================================= // // 描述: 程序单次运行检测单元 // 作者: sgao // 日期: 2015-09-25 // 备注: 程序创建的句柄都会在进程结束后自动释放,所以这里没有做关闭句柄操作 // //=========================================================================

让程序同时只能运行一个C++ Builder实现(转)

源:让程序同时只能运行一个 很多人都讨论过这个问题, 这里用Victor串口控件里面现成的共享内存功能来实现. 当程序运行第二次时只是激活第一次运行的窗口, 而不是再运行一个程序. 需要在主程序里实现, 下面蓝色的部分是增加的内容: #include <vcl.h> #pragma hdrstop #include "yb_base.h" //------------------------------------------------------------------

C# 程序只能执行一次

应用程序的主入口点. //每一个程序只能运行一个实例 bool isRun = false; System.Threading.Mutex m = new System.Threading.Mutex(false, "LocalServer", out isRun); if (!isRun) { MessageBox.Show("该程序已经在运行!"); return; }

Java--&gt;一个只能运行十次的程序

--> 感觉没什么营养的样子啊... package com.dragon.java.tensoftware; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /* * 编写一个程序, 该程序只能--运行--10次, 每次运行时提示剩余次数, 10次之后提示已到期 */ public class Test { publi

C#让应用程序只运行一个实例的几种方法

一 判断是否有相同的实例已经运行 1 根据“Mutex”判断是否有相同的实例在运行 /// <returns>已有实例运行返回true,否则为false</returns>public bool IsRunningProcessByMutex(){     bool createNew;     using (System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName

让 Delphi 程序只运行一个副本

program mutex; uses  Windows,  Forms,  Unit1 in 'Unit1.pas' {Form1}; {$R *.res} const  MutexStr = '4C3201D5-6A5A-4B8B-A2F0-B103985705F4'; // GUID var  hAppMutex: THandle; begin  ReportMemoryLeaksOnShutdown := DebugHook = 1;  Application.Initialize;