用互斥法实现防止程序重复运行,使用内核对象Mutex可以防止同一个进程运行两次.注意:是名称相同的进程,而不是exe,因为exe程序可以改名. using System.Threading; public partial class App : Application { private Mutex myMutex; private bool mutexWasCreated; private bool requestInitialOwnership = true; private void Ap…
有时我们不希望我们的WPF应用程序可以同时运行有多个实例,当我们试图运行第二个实例的时候,已经运行的实例也应该弹出来. 我们可以用Mutex来实现 打开App.xaml.cs,在App类中添加如下内容 public partial class App : Application { [DllImport("user32", CharSet = CharSet.Unicode)] static extern IntPtr FindWindow(string cls, string win…
写过Windows应用程序的朋友都常常听说"内核对象"."句柄"等术语却无从得知他们的内核实现到底是怎样的, 本篇文章就揭开这些技术的神秘面纱. 常见的内核对象有: Job.Directory(对象目录中的目录).SymbolLink(符号链接),Section(内存映射文件).Port(LPC端口).IoCompletion(Io完成端口).File(并非专指磁盘文件).同步对象(Mutex.Event.Semaphore.Timer).Key(注册表中的键).T…
第3章内核对象 在介绍Windows API的时候,首先要讲述内核对象以及它们的句柄.本章将要介绍一些比较抽象的概念,在此并不讨论某个特定内核对象的特性,相反只是介绍适用于所有内核对象的特性. 首先介绍一个比较具体的问题,准确地理解内核对象对于想要成为一名 Wi n d o w s软件开发能手的人来说是至关重要的.内核对象可以供系统和应用程序使用来管理各种各样的资源,比如进程.线程和文件等.本章讲述的概念也会出现在本书的其他各章之中.但是,在你开始使用实际的函数来操作内核对象之前,是无法深刻理解…
  本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问.在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的.内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问.调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的对象.…
内核对象用于管理进程.线程和文件等诸多种类的大量资源,每一个内核对象都只是一个句内存快,它由操作系统内核分配,并只能右操作系统内核访问.这个内存块是一个数据结构,其维护着与对象相关的信息,其中少数成员是所有对象都有的,其他大多数都是不同类型的对象特有的. 由于内核对象只能由操作系统内核访问,因此windows提供了句柄来标识内核对象,对于应用程序来说,这个句柄就相当于这个内核对象.应用程序创建一个内核对象,就会返回对应的句柄,然后可以以这个句柄作为参数,去调用操纵和关闭内核对象的函数. 操作系统…
问题: 什么是内核对象? 答:内核对象实际上时由内核分配的一块内存,而且只能由内核来访问.它时一个数据结构,成员包含有关于该对象的信息.一些成员对于所有对象类型都是一样的,比如对象名称.安全描述.使用计数等,而大部分时针对某一特定对象类型的.比如进程对象ID.基本优先级和返回码. 内核对象 windows操作系统创建和管理着已下几种类型.   对象英文名称 对象中文名称 Event objects 事件对象 File-mapping objects 文件映射对象 File objects 文件对…
1.每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问.这个内存块是一个数据结构,其成员维护着与对象相关的信息. 2.调用一个会创建内核对象的函数后,函数会返回一个句柄,它标识了所创建的对象.在32位windows进程中,句柄是一个32位的值,在64位windows进程中,则是一个64位的值. 3.为了增强操作系统的可靠性,这些句柄值是与进程相关的,不可以直接跨进程使用. 4.内核对象的所有者是操作系统内核,而非进程,在进程内创建的内核对象在进程终止时不一定会被销毁.大…
内核对象 本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问.在此数据结构中少数成员如安全描述符和使用计数是所有对象都有的,但其他大多数成员都是不同类型的对象特有的.内核对象的数据结构只能由操作系统提供的API访问,应用程序在内存中不能访问.调用创建内核对象的函数后,该函数会返回一个句柄,它标识了所创建的…
内核对象 什么是内核对象? 内核对象本质上是一个结构体,我们不能直接的操作一个内核对象,需要通过操作系统提供的一系列函数和我们使用的内核对象句柄对它进行一系列的修改. 如何操作内核对象? 创建一个内核对象:CreateXXX(对象) 打开一个内核对象使用: OpenXXX(对象名) 通常来讲,每一个内核对象都有自己的标识,可能是 id ,也可能名字,通过名称或者 id 就可以打开一个已经被创建的内核对象了. 操作内核对象:使用的是与对象关联的一些函数 关闭一个内核对象:大多数使用 CloseHa…