精华内容
下载资源
问答
  • 显示器驱动程序无法启动

    在这里插入图片描述
    解决:
    右击此电脑进入计算机管理,删除或禁用显示适配器错误的设备
    在这里插入图片描述

    展开全文
  • Windows 中一个应用程序启动过程

    千次阅读 2018-05-04 14:23:46
    Windows环境下打开一个程序,只要双击软件的图标就行了,那么它是如何启动起来的? 当我们启动电脑进入桌面时,系统会创建 Explorer.exe 进程。Explorer.exe是Windows程序管理器 或者叫 文件资源管理器,用于...

     

    # 1. Explorer.exe 

        Windows 能够流行起来,很大一个原因是它有友好的用户图形界面,操作方便简单,容易上手。在Windows环境下打开一个程序,只要双击软件的图标就行了,那么它是如何启动起来的? 
        当我们启动电脑进入桌面时,系统会创建 Explorer.exe 进程。Explorer.exe是Windows程序管理器 或者叫 文件资源管理器,用于管理Windows图形壳,删除该程序会导致 Windows 图形界面无法使用。所以,如果有时候我们电脑的桌面空白了,或者蓝屏,可以通过 Alt+Ctrl+delete(或者在dos中输入 taskmgr 命令) 打开任务管理器, 点击“文件”-> “新建任务”,输入 "explorer.exe",就可以找回我们的桌面了。
        当双击某个图标时,Explorer.exe进程的一个线程会侦测到这个操作,它根据注册表中的信息取得文件名,然后Explorer.exe 以这个文件名调用 CreateProcess 函数。注册表中有相关的项保存着双击操作的信息,如 exe 文件关联、启动 exe 的 Shell 是哪个。PC中的大多其它的进程都是 Explorer.exe 的子进程,因为它们都是由Explorer.exe 进程创建的。
     

    # 2. CreateProcess 函数的执行过程

    (1)CreateProcess 实际上是通过 NtCreateProcess 函数实现的, 此时,系统会创建一个进程内核对象。进程内核对象可以看作是操作系统用来管理进程的小的数据结构,它是在内核堆区分配的一个结构体,是系统用来存放关于进程统计信息的地方。进程内核对象维护了一个句柄表的结构,当进程被初始化之后,其句柄表是空的。当进程内的一个线程通过指定的函数创建了一个内核对象时,内核会为对象分配一块内存区域并初始化这块区域,然后内核会在进程的句柄表中查找一个空的入口,找到之后会初始化句柄表的以索引定位的区域。初始化的主要过程就是填充句柄表的一个单元,包括指定内核对象地址,指定访问码,指定标记等。

    (2) 进程内核对象创建后,它的引用计数被置为1。然后系统为刚刚创建的进程分配的进程虚拟地址空间。要注意了,之所以称为虚拟地址空间,就是因为这块地址空间并不在内存之中,它只是在硬盘上划分的被称为“页”的文件。每个进程都有自己的虚拟地址空间,在进程初始化的时候,其所有的程序和数据会被加载到这个地址空间中。等到真正运行的时候,系统为每个进程配置的页表会把虚拟地址映射为真正的物理地址(这个过程,我会在后面的博客中详细介绍如何映射)。

     

    (3)初始化虚拟地址空间。进程地址空间创建后,Windows的装载器(loader,也称为PE装载器)开始工作,Loader会读取EXE文件的信息(PE文件)。此时 loader 会检查PE文件的有效性,如果PE文件有错误,进程也就无法启动了。如果PE文件没有错误,装载器就把PE文件的内容(二进制代码)映射到进程的地址空间中,然后读取 PE文件的导入地址表(Import Table),这里存放有exe文件需要导入的模块文件(DLL),系统会一一加载这些DLL到进程的地址空间中,具体做法是调用 LoadLibrary 函数加载程序代码到某个地址,然后系统会映射这些代码到进程的地址空间中,要知道DLL只需加载一次就可映射到所有进程的地址空间(映射过程我会在后面详细阐述)中,并为每个DLL维护一个引用计数,当引用计数为 0 时,DLL就从内存中卸载,释放占用的内存。DLL里面可能又引用了其它的DLL,因此加载DLL时是递归形式的,直到加载完Import Table 里描述的所有DLL模块,此时进程初始化部分完成。

    (4)创建进程的主线程。当进程的初始化完成后,开始创建进程的主线程,一个进程至少要有一个主线程才能运行,可以说进程只是充当一个容器的作用,而线程才是执行代码的载体。线程是用 CreateThread 这个函数创建的。创建线程时,也和进程相似,系统会创建线程内核对象,初始化线程堆栈。线程堆栈有两个,一个是核心堆栈,由核心态维护;另一个是用户堆栈,运行在用户态下。同样的,线程的引用计数也置为1。
    (5)C/C++运行期库初始化。当进程的主线程初始化完成后,并且线程得到了CPU时间片,CPU把CS:IP指向程序入口(OEP),这个地址相当重要,因为这是程序运行时第一条指令所在的地址(我们可以使用一些PE辅助工具来查看PE文件的地址信息,注意真实地址==偏移地址 + 基址)。其实,CS:IP指向的地址处是一条JMP指令,它跳转到程序真正的入口函数,入口函数有以下4种形式:
    ···
    mainCRTStartup  (用于 ANSI 版本的控制台应用程序 )
    wmainCRTStartup ( 用于 Unicode 版本的控制台应用程序 )
    WinMainCRTStartup ( 用于 ANSI 版本的窗口应用程序 )
    wWinMainCRTStartup ( 用于 Unicode 版本的窗口应用程序)
    ···

    下面再看看入口函数的源码:

    ···

    int XXXCRTStartup(void)                   //XXX表示不同Windows版本

    {   __security_init_cookie();       // 完成安全方面的初始化
        return__tmainCRTStartup();
    }
    ···

    在__tmainCRTStartup中首先调用了GetStartupInfoW函数取得父进程创建本进程时的启动信息, 然后又是一系列的初始化,其中包括C++构造函数的调用,还有静态变量,全局变量的初始化,这些操作是在_initterm这个函数中完成的。接着,我们的 (w)WinMain / (w)main 函数会被调用,到这时,用户程序代码才开始被执行。

     

     

        

     

     

     

     

     

     

     

     

     

    展开全文
  • Windows进程查找

    千次阅读 2019-09-04 20:23:05
    Windows下根据名称查找进程 使用vs调试C++程序时,有时由于强制退出,会出现 ***.exe无法写入 的错误,重启vs甚至都无法解决。 原因 由于调试强制结束,导致***.exe进程还在后台运行。 解决办法 打开命令提示符,...

    Windows下根据名称查找进程

    使用vs调试C++程序时,有时由于强制退出,会出现 ***.exe无法写入 的错误,重启vs甚至都无法解决。

    原因

    由于调试强制结束,导致***.exe进程还在后台运行。

    解决办法

    打开命令提示符,强制结束该后台进程:
    1.Ctrl + R ,输入cmd 打开命令提示符;
    2.查找进程, ***.exe 表示自己要查找的进程名称:

    tasklist | find "*.exe"
    

    显示如下:

    testServer.exe               16984 Console                    1         76 K
    

    其中16984就是要找的进程的PID。
    3.强制关闭进程:

    taskkill -PID 16984 -F
    

    重新启动调试,成功!!!

    展开全文
  • NT服务启动Windows程序 -- NTService

    千次阅读 2008-10-08 15:47:00
    从NT服务启动Windows程序通常,NT服务是控制台应用程序,它没有消息循环。不必等到用户登陆电脑,NT服务便能启动,并且在用户登出之后,它也不会停止运行。然而,许多现存的ActiveX控件很难,有时候根本不可能在...

    从NT服务启动Windows程序

    通常,NT服务是控制台应用程序,它没有消息循环。不必等到用户登陆电脑,NT服务便能启动,并且在用户登出之后,它也不会停止运行。然而,许多现存的ActiveX控件很难,有时候根本不可能在控制台程序中使用。

    另一方面,MFC和VB程序都是Windows应用程序,所以在MFC或VB程序中使用ActiveX控件相当简单。要是能使MFC和VB程序像NT服务一样运行就不错了:

    •  在用户登陆电脑之前就启动
    •  在用户登出电脑之后继续运行

    可以用Windows程序的形式直接写NT服务,但是本文要提供一个更简单的解决方法。本文配套源代码是一个简单的NT服务程序,它能够启动和关闭其它程序。所有你需要做的是安装这个服务,修改.ini文件。下面是使用此NT服务的好处。

    •  它能够启动你指定的任意多个程序。被启动的程序将像 NT 服务一样运行(例如,不用用户登陆机器,它们便会在后台运行)。
    •  在没有合适特权情况下,用户不能终止由此服务启动的程序(除非机器关闭)。
    •  你可以在 NT 服务之外测试和调试你的程序。例如,你可以在 DevStudio 调试器中运行你的程序,单步进入源代码中查找错误等。当“调试无错”后,你将它配置成产品,从 NT 服务启动它。

    XYNTService

    XYNTService.exe是此NT服务程序可执行文件的名字。它是我研发的客户-服务器开发工具的一部分。你可以免费使用和修改本文包含的源代码。我知道也有其它的工具提供和XYNTService几乎相同的功能。然而,如你所见,XYNTService拥有更多的特性,并且更容易使用(例如,不需要编辑注册表)。下面显示了如何使用此程序。

    •  为了安装(install)服务,在命令提示符下运行下面命令:XYNTService -i
    •  为了卸载(un-install)服务,在命令提示符下运行下面命令:XYNTService -u

    默认情况下,在电脑重启时,安装的服务便会自动启动。你也可以使用服务图标从控制面板启动和关闭服务。服务启动时,它将会一个挨一个地创建在XYNTService.ini文件中定义的所有进程。服务关闭时,它将会终止这些进程(以相反顺序)。XYNTService.ini文件应该和可执行文件放在相同的目录。下面是此文件的一个例子。

      [Settings]
    ServiceName = XYNTService
    ProcCount = 3
    CheckProcess = 30
    [Process0]
    CommandLine = c:/MyDir/XYRoot.exe
    WorkingDir = c:/MyDir
    PauseStart = 1000
    PauseEnd = 1000
    UserInterface = Yes
    Restart = Yes
    [Process1]
    CommandLine = c:/MyDir/XYDataManager.exe
    WorkingDir = c:/MyDir
    PauseStart = 1000
    PauseEnd = 1000
    UserInterface = Yes
    Restart = Yes
    [Process2]
    CommandLine= java XYRoot.XYRoot XYRootJava.ini
    UserInterface = No
    Restart = No

    ServiceName属性指定想要为此NT服务使用的名字,默认名字为XYNTService。如果复制可执行文件和.int文件到不同的目录,在.int文件中修改ServiceName属性,即可安装和配置一个不同的服务。

    ProcCount属性指定想要此服务创建的进程的数量。节[Process0]、[Process1]等定义了相关进程的属性。如你所见,此例中要创建3个进程,XYRoot.exe,XYDataManager和java是程序的名称,你可以为每个进程在CommandLine属性指定参数。必须在CommandLine属性为对应进程指定可执行文件的完整路径,除非可执行文件在系统路径。

    CheckProcess属性指定是否检查XYNTService启动的进程,也指定了检查的频率。如果此属性的值为0,便不进行检查。如果属性的值为30,则每经30分钟XYNTService将查询操作系统以查看它启动的进程是否还在运行,如果进程的Restart属性值(后门解释)定义为Yes,则将终止的重新启动。此属性的默认值(如果你没有指定它)是60。

    WorkingDir属性是当前进程的工作目录。如果你没有指定此属性,当前进程的工作目录将会是X:/winnt/system32。PauseStart属性是服务在启动当前进程后将等待的时间(以毫秒为单位)。在下一个进程需要依靠前一个进程的情况下此选项非常有用。例如,第二个进程不得不连接到第一个进程以便在第一个进程完成初始化后它再运行。如果你没有指定PauseStart属性,默认值将是100毫秒。

    当XYNTService关闭时,它将首先向它创建的进程投递WM_QUIT消息,然后调用Win32函数TerminateProcess。PauseEnd属性是服务在调用TerminateProcess之前等待的时间(以毫秒为单位)。此属性可以用来给进程清除和关闭的机会。如果你没有指定PauseEnd属性,默认值将是100毫秒。

    UserInterface属性控制一个登陆用户是否能够看到XYNTService创建的进程。然而,仅当XYNTService运行在本地系统帐户下时才起作用,默认就是这样的。在这种情况下,XYNTService创建的进程将不能访问特定用户的设置。你可以配置XYNTService运行在一个用户帐户下,在控制面板中很容易做到这一点(双击服务图标,然后在安装的服务列表中双击XYNTService弹出配置对话框)。

    Restart属性用来决定你是否想要XYNTService重新启动终止的进程。如果此属性是No(这是默认值),那么对应进程将不会被重启。如果是Yes,那么终止的进程将会被XYNTService重新启动。启动终止进程的频率由上面的CheckProcess属性指定。

    你可以从命令行反弹(停止和重启).int文件中定义的任何进程。例如,如下命令:
    XYNTService -b 2

    将停止和重新启动.ini中[Process2]节定义的进程。

    XYNTService也可以用来从命令行启动和停止其它服务。下面是启动(run)和停止(kill)其它服务的命令。
      XYNTService -r NameOfServiceToRun
    XYNTService -k NameOfServiceToKill

    特别的,你可以在命令行使用上面的命令启动和停止XYNTService自身。请注意,你不能不带参数启动XYNTService。

    运行XYNTService时出现的所有错误都将被写入日志文件,此文件与可执行文件在相同目录下。日志文件中的出错代码是GetLastError API返回的十进制数字,你可以在MSDN中查看详细信息。

    展开全文
  • 有时在我们编写的前台程序需要开机运行,当有后台程序时可以注册服务方式进行启动(system权限),前台程序启动需要等待用户登录到桌面后运行(涉及界面交互等),前台程序启动主要有几种方式: 1. 写入启动项...
  • windows启动修复If Windows isn’t starting properly, you can often use the integrated “startup repair” tool to fix it. This recovery tool will scan your PC for problems like missing or damaged system...
  • 明明程序 已经开启了 ,可是用tasklist |findstr /i xxxxxx.exe , 就是没有输出 ,也就是没有找到 ,郁闷了半天 ,发现 原来 程序名字太长了,静卧测试 加上 .exe 名字不能超过25个字符
  • Windows开机自动启动程序在哪里?作者:魏永超整…  文章来源:本站原创 点击数:14459 更新时间:2005-6-30 Windows开机自动启动程序在哪里?  自动启动程序在哪里?  一、当前用户专有的启动文件夹  ...
  • nodejs程序配置成windows-server服务,实现开机自启动

    万次阅读 热门讨论 2017-06-20 11:40:19
    nodejs程序配置成windows-server服务,实现开机自启动
  • 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run。...参考程序可以见下:(查找程序目录
  • 如何快速高效简洁的打开软件 干净利索的windows快捷程序启动器 本文的主题是如何高效快捷的打开你想要打开的软件 本文介绍的应该是最简洁的一种方式,借助于windows内部的path进行设置 也可以认为是一...
  • 引言: 在windows下经常会碰到,某个端口被占用,无法启动特定应用的问题,需要找到占用特定端口的程序,并停掉它,然后才能正常继续工作,今天我们将介绍如何来查找端口的占用。
  • Windows启动过程详解

    万次阅读 多人点赞 2018-02-24 12:00:22
    我们每天都在和Windows打交道,很多人可能每天都要面对多次Windows启动过程,可是您知道在Windows启动过程背后,隐藏着什么秘密吗?在这一系列过程中都用到了哪些重要的系统文件?系统的启动分为几个步骤?在...
  • 环境:Rational Rose 2003 + Windows 7 Ultimate English ... 问题:安装Rational Rose 2003后,启动报错:无法启动程序,因为计算机中丢失 suite objects.dll。    解决:  1. 使用EveryThing查找suite o
  • 安装完以后提示找不到 suite objects.dll: ...经查找,该 dll 存在: 找不到的原因是,安装程序自动设置在 Path 中的环境变量有误: 把最后的 common 改成 Common:  就 OK 了:
  • Windows窗体应用程序设计小一

    千次阅读 多人点赞 2019-01-07 23:50:06
    一,windows 窗体应用程序是由控件组成的,控件是可以重复使用的类或组件 MessageBoxButtons枚举值及其说明 成员名称 说明 MessageBoxButtons.AbortRetryIgore 消息框包含“终止”,“重试”,...
  • 问题描述 添加打印机或者使用打印机相关功能时弹框提示错误: ...Windows系统本地打印后台处理程序服务没有启动。 解决方案 方法一 1、控制面板->程序; 2、启用或关闭 Windows 功能; 3、勾选打印机...
  • windows启动过程详解

    千次阅读 2008-07-16 16:20:00
    我们每天都在和Windows打交道,很多人可能每天都要面对多次Windows启动过程,可是您知道在Windows启动过程背后,隐藏着什么秘密吗?在这一系列过程中都用到了哪些重要的系统文件?系统的启动分为几个步骤?在...
  • Windows 应用程序必须有一个入口点函数,应用程序开始运行时,这个函数会被调用。使用Win32 SDK开发程序的入口函数如下: int WINAPI WinMain( HINSTANCE hInstanceExe, HINSTANCE, PTSTR pszCmdLine, int ...
  • QT 管理员权限 UAC Windows
  • Windows:直接使用命令运行一个程序

    千次阅读 2019-04-09 10:53:56
    打开Windows运行命令 win+R,就是运行命令快捷键 ...3、conf:启动系统配置实用程序 4、charmap:启动字符映射表 5、calc:启动计算器 6、chkdsk.exe:Chkdsk磁盘检查 7、cmd.exe:CMD命令提示符 ...
  • 同样显示为“应用程序无法正常启动(0xc0150002)。请单击“确定”关闭应用程序”。在百度,Google中搜索中发现有许多人遇到了同样的问题,而且软件也不限于腾讯软件,有摄像头、CAD的各种软件。  打开...
  • jar包在windows使用启动方式以及假死解决方案参考windows jar包启动的几种方式介绍jar包的停止jar包在windows启动的假死状态假死状态解决办法总结原因 windows jar包启动的几种方式介绍 java -jar xxx.jar(jar包的...
  • Windows查找各类游戏存档路径

    千次阅读 2020-01-09 20:59:23
    几乎所有的游戏在创建新存档的时候都会产生一个新的存档文件,而windows会记录文件的修改时间,所以我们可以在存档完成的时候立刻检索所有刚刚修改过的文件,从里面用排除法找出存档文件。这个问题的核心在于我们...
  • 我们可以在任何路径下输入 explorer 来启动资源管理器,可以在任何路径中输入 git 来使用 git 相关的命令。我们知道可以通过将一个应用程序加入到环境变量中来...本文内容Windows 如何查找程序路径?使用 App Paths ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,673
精华内容 75,869
关键字:

windows启动查找程序