标签:des c style class blog code
有时候我们希望我们所写的exe在机器上同一时间只能有一个实例进行运行。通常我们会采取遍历当前所有的进程,如果有的进程exe所在的物理路径就是当前exe的物理路径的话,那么说明这个exe已经启动过一次了,就不再启动了。但是注意,这里有一些需要注意的小细节。其实对于我们的程序判断没有太大的影响,因为我们这个exe的层次跟那些拒绝访问的进程的层次不太一样。如果我的exe启动了一个进程,那么我的这个exe遍历所有进程的时候,对于这个已经启动的进程是肯定能访问的。也就是说,我们遍历的时候,肯定能访问我们想要访问的进程,只要它存在我们就能找到。所以对于这些抛出异常的进程,它如果抛出异常,我们程序就没法执行了,我们现在要做的就是,catch到异常,不去任何处理,继续运行我们的程序就行。
Process[] processes = Process.GetProcesses(); Process process = null; foreach (Process p in processes) { try { //这里加if就是因为这两个进程的某些属性一旦访问就抛出没有权限的异常 if (p.ProcessName != "System" && p.ProcessName != "Idle") { if (p.MainModule.FileName == address) { process = p; break; } } } catch(Exception ex) { Log.Info(ex.Message); } }这里还有一个要注意的东西很重要,就是Console控制台程序的进程。对于一个控制台程序如果你不想同一个时间内有多个实例来运行,那么用这种方法是行不通的!
You are no doubt reading this article because you are wondering what on earth this conhost.exe process is doing in Task Manager, and why it’s running on your shiny new Windows 7 PC. We’ve got the answer for you.
So What Is It?
The conhost.exe process fixes a fundamental problem in the way previous versions of Windows handled console windows, which broke drag & drop in Vista.
It’s a completely legitimate executable—as long as it’s running from the system32 folder, and is signed by Microsoft. Scanning your computer for viruses is never a bad idea, though.
Wait, What? So Why Do I Need It?
Oh, you wanted more information? I suppose I can oblige with some background information. Essentially, there’s a problem with the way the console process works on previous versions of Windows—they are all hosted under the csrss.exe (Client Server Runtime Process) service. This process runs as a system-privileged account.
If you take a look at the command prompt on Windows XP, you’ll probably notice that the window doesn’t use the active theme at all. This is because the CSRSS process doesn’t have the ability to be themed.
If you take a look at the console in Windows Vista, it looks like it uses the same theme as everything else, but you’ll notice that the scrollbars are still using the old style (look closely). This is because the DWM (Desktop Window Manager) process handles drawing the title bars, but underneath it still works the same way, and the scrollbars are part of the window itself.
You might also notice that Windows Vista broke the ability to drag and drop files from Explorer straight into the command prompt. It just flat out doesn’t work, because of security issues between the CSRSS process running with a higher level of privileges.
Windows 7 Does It Differently
Checking it out in Process Explorer under Windows 7 shows that the conhost.exe process is running underneath the csrss.exe process.
The conhost.exe process sitting in the middle between CSRSS and cmd.exe allows Windows 7 to fix both of the problems in previous versions of Windows—not only do the scrollbars draw correctly, but you can actually drag and drop a file from Explorer straight into the command prompt:
And it’ll paste in the path onto the command line. (of course this example isn’t very useful).
Still Aren’t Convinced?
I can see our relationship has some trust issues. If you really want to be sure, check out the file properties for the conhost.exe executable, and you’ll see that the description says Console Window Host:
If you look at the details of the process from within Process Explorer, you’ll notice that the ComSpec is set to cmd.exe, a clear indication that it’s hosting the command prompt.
So now you know what the conhost.exe process does, and why you should never attempt to delete it. Ever.
C#中遍历当前所有进程时存在的陷阱,布布扣,bubuko.com
标签:des c style class blog code
原文地址:http://blog.csdn.net/sundacheng1989/article/details/28626577