none
win10开启快速启动,关机之后开机,这时我们程序运行起来没有窗口,任务管理器里面可以看到进程在运行。 RRS feed

  • 问题

  • 爱win10系统上,当开启快速启动时,这时关机然后开机。系统起来之后我们的程序被系统启动了,但是没有窗口,在任务管理器中可以看到有该程序的进程在运行。这是什么引起的呢?

    当把快速启动功能关闭时,关机然后开机,我们的程序不会被启动,这时手动运行程序,可以正常。


    2019年11月8日 8:34

答案

  • 你好,

    感谢你在这里发帖。

    查阅了相关资料,为你罗列下现有信息。

    Win10快速启动: 这是微软结合了休眠模式和注销功能组成的一种启动方式。休眠模式是内存中的数据都会存储到硬盘里,开机时按下开机键,系统在完成自检后会从硬盘读取这些临时存储的内存数据,并将其恢复到内存中。
    睡眠模式时系统会将正在处理的数据保存到内存中,除内存以外的所有设备都停止供电,在睡眠模式下,可以随时通过鼠标、键盘或者开机按钮唤醒,唤醒之后电脑的运行状态和睡眠之前一致。
    Win10的快速启动是利用了睡眠模式机制形成的一个功能,其实现方式是先将系统注销,然后进入休眠状态。再次按下开机键时,自检后将硬盘上休眠文件注入内存,然后登录系统,完成启动。

    其实快速启动也是需要先完成注销将所有程序关闭的,然后再开启系统核心进程由内存注入硬盘。所以单单是快速启动似乎不影响你的问题。继续了解后发现似乎是Win10的一个功能RunOnce导致了你的问题。

    RunOnce: RunOnce是Windows系统自带的一个功能,在系统启动后被Windows资源管理器调用,可以将对应的注册表项下的键值执行一次,执行完毕后其对应的注册表字符串值也会被自动删除。RunOnce注册表项一般在软件安装时用到的比较多,举例来说当我们更新驱动时,驱动的安装程序一般会告诉我们先要卸载旧版驱动,然后手动重启,重启后安装程序会自动启动来继续新驱动的安装。这里其实就是驱动的安装程序调用了RunOnce功能,在卸载掉了旧版驱动程序后向注册表的RunOnce项中添加了安装文件所在路径,然后重启后会自动打开该文件来执行后续操作,Win10的开机自动打开上次未关闭的程序也是通过RunOnce来实现的。

    值得注意的是在Win10 1709上,这项功能似乎是被强制启用的,没有任何让我们自己选择的空间,只要你的Win10系统开启了快速启动功能,那么开机后一定会自动打开上次未关闭的程序。结合这点来看,与你的状况极度相似。你可以查看你的程序是否向RunOnce写入了键值。同时你也可以选择关闭RunOnce,虽然这个方法并不建议,因为会影响你的系统使用,后续软件如果要使用到RunOnce将会十分麻烦,但这也不失为一种解决方案。

    Best Regards,

    Suarez Zhou





    2019年11月11日 2:34

全部回复

  • 你好,

    感谢你在这里发帖。

    查阅了相关资料,为你罗列下现有信息。

    Win10快速启动: 这是微软结合了休眠模式和注销功能组成的一种启动方式。休眠模式是内存中的数据都会存储到硬盘里,开机时按下开机键,系统在完成自检后会从硬盘读取这些临时存储的内存数据,并将其恢复到内存中。
    睡眠模式时系统会将正在处理的数据保存到内存中,除内存以外的所有设备都停止供电,在睡眠模式下,可以随时通过鼠标、键盘或者开机按钮唤醒,唤醒之后电脑的运行状态和睡眠之前一致。
    Win10的快速启动是利用了睡眠模式机制形成的一个功能,其实现方式是先将系统注销,然后进入休眠状态。再次按下开机键时,自检后将硬盘上休眠文件注入内存,然后登录系统,完成启动。

    其实快速启动也是需要先完成注销将所有程序关闭的,然后再开启系统核心进程由内存注入硬盘。所以单单是快速启动似乎不影响你的问题。继续了解后发现似乎是Win10的一个功能RunOnce导致了你的问题。

    RunOnce: RunOnce是Windows系统自带的一个功能,在系统启动后被Windows资源管理器调用,可以将对应的注册表项下的键值执行一次,执行完毕后其对应的注册表字符串值也会被自动删除。RunOnce注册表项一般在软件安装时用到的比较多,举例来说当我们更新驱动时,驱动的安装程序一般会告诉我们先要卸载旧版驱动,然后手动重启,重启后安装程序会自动启动来继续新驱动的安装。这里其实就是驱动的安装程序调用了RunOnce功能,在卸载掉了旧版驱动程序后向注册表的RunOnce项中添加了安装文件所在路径,然后重启后会自动打开该文件来执行后续操作,Win10的开机自动打开上次未关闭的程序也是通过RunOnce来实现的。

    值得注意的是在Win10 1709上,这项功能似乎是被强制启用的,没有任何让我们自己选择的空间,只要你的Win10系统开启了快速启动功能,那么开机后一定会自动打开上次未关闭的程序。结合这点来看,与你的状况极度相似。你可以查看你的程序是否向RunOnce写入了键值。同时你也可以选择关闭RunOnce,虽然这个方法并不建议,因为会影响你的系统使用,后续软件如果要使用到RunOnce将会十分麻烦,但这也不失为一种解决方案。

    Best Regards,

    Suarez Zhou





    2019年11月11日 2:34
  • 你好

    通过检查我们的程序发现与我们程序中的一个服务有关,这个服务的功能是检测设备插入,如果有设备插入时,检查是不是我们的设备,如果是我们的设备的话,则以当前登录用户的身份把我们的程序运行起来。现在的问题是当打开快速启动时,当系统启动用户还未登录时,这时已有设备插入的消息上报,这时我们通过检查EXPLORER.EXE进程是否存在判断用户是否登录,在win10中文系统测试,通过log分析,用户未登录这时EXPLORER.EXE进程不存在,但是在日文系统下用户未登录,但是EXPLORER.EXE进程却是存在的。这样就导致在日文系统和中文系统下,我们的程序表现不一致。我们该如何判断用户是否登录呢?并且在不同的系统下判断结果都是一致的。

    2019年11月13日 9:53
  • 哎呦一个问题,当开启快速启动时,对runonce功能会有影响么?这边测试发现runonce功能不会启动我们的程序,在关机之前不关闭我们的程序,开机起来也不会运行我们的程序。我们程序是普通用户就可以运行的。
    2019年11月13日 9:55
  • 你好,

    >>当开启快速启动时,这时关机然后开机。系统起来之后我们的程序被系统启动了

    >>在关机之前不关闭我们的程序,开机起来也不会运行我们的程序

    能详细描述下你的状况吗,这前后似乎有一些矛盾,开启快速启动时,你的程序会不会自动启动呢?

    >>我们该如何判断用户是否登录呢?并且在不同的系统下判断结果都是一致的。

    你的程序自动启动这是一个问题,我觉得你现在关注的和这个问题似乎没有关系,是什么触发你的程序,让他启动,程序不会自己把自己运行,肯定是程序通过其他东西打开你的程序。RunOnce是随快速启动功能一块开启的,网上也有很多教程关闭RunOnce,RunOnce关闭后也支持开启,所以可以进行测试。我觉得控制变量法来看待问题的话,你需要控制一个变量,那就是快速启动开启的时候,关闭RunOnce和开启RunOnce你的程序会不会自启,这样就可以排除一个可能的原因。

    Best Regards,

    Suarez Zhou



    2019年11月13日 10:06
  • 你好

    不好意思,我重新描述一下我的问题。

    我们的软件中有一个服务,该服务一直检测是否有我们的设备插入,如果有我们的设备插入就会把我们应用程序启动起来。之前开机之后再任务管理器中有应用的进程运行,但是没有窗口,就是该服务导致的,目前已经解决。现在出现的问题是,在启动应用时服务是以当前登录用户的权限运行的。服务检测到有我们的设备插入时,会先判断EXPLORER.EXE是否存在,如果存在的话,获取EXPLORER.EXE的用户名,以此来判断用户是否登录。只有用户登录的时候才运行应用程序,否则不运行。通过EXPLORER.EXE的用户名来判断用户登录时,在有些电脑上,用户未登录,但是却可以获取到EXPLORER.EXE的用户名,这样我们的服务认为用户已登录了,从而把应用启动了。目前测试发现通过EXPLORER.EXE的用户名来判断用户是否登录不准确,是否有其它方法可以准确的判断用户登录呢?

    2019年11月14日 12:05
  • 你好,

    如果针对于标题的问题已经解决,请标记有价值的回复为答案或为其投票为有帮助,或者我们也欢迎你分享你自己的解决方案,并标记其为答案。

    如果你有新的问题,我们建议你重新开一个帖子询问,这会帮助其他论坛用户更快地找到相似问题地答案。

    Best Regards,

    Suarez Zhou


    如果您对Visual Studio 或Microsoft Azure相关产品感兴趣,请点击此链接,或扫描以下二维码注册获取相关信息。


    2019年11月15日 2:36