怎样实现在程序打开的时候就不能对程序做除了复制之类的其他任何操作,如改名,删除,移动

public Form1()
{
InitializeComponent();
System.Diagnostics.Process currentprocess = System.Diagnostics.Process.GetCurrentProcess();
System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcessesByName(currentprocess.ProcessName);
if (myProcesses.Length > 1)
{
MessageBox.Show("当前程序已启动");
this.Close();
this.Dispose();
GC.Collect();
}
}
例如这个,如果打开了一个进程,我把程序复制到其他地方还是打不开,我要能根据当前路径判断的,把程序复制到其他地方就能打开两个
还有怎样实现在程序打开后就不能更改程序的名称,在有多个form,并且第一个form会隐藏的情况下
拜托给点注释行不,看不太懂,那个run是什么啊?

弑天下
浏览 78回答 2
2回答

小怪兽爱吃肉

public Form1(){InitializeComponent();System.Diagnostics.Process currentprocess = System.Diagnostics.Process.GetCurrentProcess();System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcessesByName(currentprocess.ProcessName);int count = myProcesses.Where(n => n.MainModule.FileName == currentprocess.MainModule.FileName).Count();if (count > 1){MessageBox.Show("当前程序已启动");this.Dispose();}}测试通过(调试模式下测试无效), 用的.NET 3.5 才行

米脂

C# 创建互斥进程(程序) 互斥进程(程序), 简单点说,就是在系统中只能有该程序的一个实例运行. 现在很多软件都有这功能,如Maxthon 可以设置为"只允许打开一个窗体",还有Bitcomet等. 我也是看到这些软件的这个功能才来研究这个问题的. 要实现程序的互斥,通常有4中方式,下面用 C# 语言来实现:实现方式一: 使用线程互斥变量. 通过定义互斥变量来判断是否已运行实例.C#实现如下: 把program.cs文件里的Main()函数改为如下代码: static void Main() { bool runone; System.Threading.Mutex run = new System.Threading.Mutex(true, "jiaao_test", out runone); if (runone) { run.ReleaseMutex(); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } else { MessageBox.Show("已经运行了一个实例了。"); } } 正在运行的程序,他的EXE文件是无法删除和移动的,这是windows的文件保护!比如你打开一个word,然后不关掉,你再去删除这个word是删除不掉的。更本不需要你程序去做这个保护!
打开App,查看更多内容
随时随地看视频慕课网APP