【问题标题】:programmatically reboot in safe mode then execute program以安全模式以编程方式重新启动,然后执行程序
【发布时间】:2012-10-27 21:19:18
【问题描述】:

我有一个程序,单击 is 按钮后,我希望出现一条消息,告诉用户计算机正在重新启动(使用 ok/cancel 选项),然后计算机将重新启动。然而,更重要的是,我希望它重新启动到安全模式。然后当用户登录到安全模式时,它会在启动时自动启动一个程序。

现在我意识到这可以通过使用 /safemode 以编程方式编辑 boot.ini 来实现,一旦计算机登录就启动程序,然后告诉计算机重新启动。但是,假设最终用户对 Windows 没有足够的了解手动反转这些设置。

我想要的是,在最终用户在 Windows 安全模式下完成程序后,他们可以简单地重新启动计算机并继续使用 Windows,而无需手动将任何设置更改为启动进入安全模式之前的方式。

注意* 将在安全模式下运行的程序已经过测试,可以在安全模式下运行。我只需要知道如何让最终用户进入安全模式并自动运行程序,而最终用户并不知道如何反转这些设置。

谁能建议一种方法来执行所有这些疯狂的事情? C# 或 vb.net 中的示例会很棒!

提前谢谢你!

【问题讨论】:

  • 我会将其设置为以安全模式启动,并运行一次删除该选项。
  • 你问为什么要启动到安全模式?将在安全模式下启动的程序是反恶意软件程序,在安全模式下运行效果最佳。
  • 感谢布拉德的建议。我不熟悉如何将安全模式设置为运行一次?
  • 我也不知道,但我指的是让您编写运行一次的程序以删除 boot.ini 参数以在安全模式下启动。 support.microsoft.com/kb/179365
  • 我一定会调查的。谢谢!其他任何人的任何其他建议或示例也会很棒。

标签: c# vb.net reboot


【解决方案1】:

你可以调用一个运行这个命令的进程

bcdedit /set {current} safeboot Minimal

然后让你的应用程序成为一个windows服务,并添加一个带有服务名称的注册表项

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot\Minimal\Your 服务名称

【讨论】:

【解决方案2】:

您可以通过在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce 的注册表中输入一个值来重置安全启动参数 一旦用户重新启动进入安全模式,它将运行

我不确定这部分,但我在批处理文件中使用它来重置 bcdedit 值,因此它可能适用于您的程序,也可能不适用于您的程序。

/v "*UndoSB" /t REG_SZ /d "bcdedit /deletevalue {current} safeboot"`

原始bat命令:

bcdedit /set {current} safeboot network
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce /v "*UndoSB" /t REG_SZ /d "bcdedit /deletevalue {current} safeboot"
SHUTDOWN -r -f -t 07

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多