在 Windows 重启后恢复打开的软件

在 Windows 重启后恢复打开的软件

我发现,在漫长的一天结束时,我有时会运行大量程序。所有这些程序我明天都需要使用。通常,这不是问题,我只需锁定机器,明天再回来。我的问题出现在半夜启动 Windows 更新并强制重启我的电脑时。这反过来会关闭我所有打开的软件。我当然会定期保存所有内容,这样我就不会丢失任何东西,但每当重启时,我都会浪费时间重新打开所有这些资源。

[编辑]

我应该澄清的是,我仍然希望能够在更新发布时重新启动我的计算机。阻止重新启动只会将问题推迟到以后。我应该更具体地说明,我希望能够在因任何原因重新启动后恢复我的工作环境。例如定期维护、断电、更新和软件安装。

[编辑]

我无法简单地将它们设置为在启动时启动,因为这些文件每周都会发生变化。所以我需要一些东西来监控我打开的内容,并让我可以在重新登录时“恢复”这些软件会话。

有人能给我一些建议吗?如果这是唯一的选择,我甚至愿意购买软件来帮我做这件事。

谢谢

答案1

这太烦人了,这个问题至今还没有一个优雅的解决方案!

我们都经历过这样的事情:Windows 速度变慢直至停止(某种内存泄漏导致了这种情况,因为你通常在 chrome 中打开 132 个选项卡,在 Firefox 中打开 57 个选项卡,总共打开 24 个窗口,同时执行涉及所有窗口的复杂操作,因为你在做一份又一份工作,一份又一份工作...... 这类人),它变得如此之慢以至于你实际上开始浪费时间等待您的计算机上发生的事情.....所以您只需重置过去 5 周内慢慢建立起来的会话,并最终屈服于可怕的 Windows 重启后重新创建错综复杂的窗口、打开的文件和资源管理器文件夹的噩梦。

出色地。

我花了很多时间寻找不会让它变成噩梦的优雅解决方案,这是我的结论和我当前的“解决方案”。

我发现只有一个程序可以保存和恢复程序及其打开的文件 - 而且它大部分时候都非常流畅。Twinsplay(专业版)。 (CacheMyWork智能关闭两者都只能恢复程序,而不恢复文件。

然而 Twinsplay 也存在一些实际问题和注意事项(而且它不是免费软件,售价为 40 美元):

  1. 恢复 Firefox 时,它似乎复制了里面的所有选项卡,必须对其进行编码以记录您在 Firefox 中加载的内容(好像每个选项卡都是一个“文件”,就像它会忠实地恢复您的所有 Word 文件一样),因此,如果您已将 Firefox 设置为打开上一个会话中的选项卡,并且打开了 100 个选项卡,它将尝试加载 200 个选项卡,通常会导致灾难。此外,它会打乱选项卡的顺序!!(值得庆幸的是,它至少仍将重复的选项卡保留在自己的“组”中,从原始选项卡的最后一个开始,但两个选项卡组的顺序都乱了,所以是的,它也会打乱您原始选项卡的顺序)。我确信同样的问题也会发生在 Chrome 中.....我没有测试它(我不敢!)。

  2. 另一个问题是:对于任何可能经常打开多个文件的程序(如 Word、Photoshop、InDesign):如果由于某种原因,在将第一个文件加载到程序中时出现对话框(宏错误,或者像我的 InDesign 中一样,第一个文档中缺少图像链接),那么第一个文档之后的所有文档都将无法打开,因为 Twinsplay 的设计是将所有文件一次性加载到程序中。而且 Twinsplay 不会在其 UI 的任何地方显示已保存会话中的文件列表(我检查过,Appdata 日志/配置文件中也没有显示),所以如果发生这种情况,您可能会忘记 4 周前在 InDesign 中处理的第五个文件,而现在您仍然需要完成它!

因此:完成所有这些之后,我所采取的方法是:

我浏览任务栏中打开的每个文件,复制其文件路径(如果您熟悉 Windows 对话框、菜单和键盘快捷键,这很容易快速完成),对于任何文件或窗口,我位于特定位置或突出显示了某些内容等,我只需记下来,这样 10 分钟后就不会忘记。以下是这是一个虚拟的例子。

然后,在我重启后,我只需将每个文件的路径粘贴到 Windows 资源管理器地址栏中,即可使用其关联程序一次打开一个文件。如果我有一个文件实际上没有在其关联程序中打开(例如 Photoshop 中的 TIFF),我想我会记下来以便记住。

--

现在。我的解决方案还不错,但仍然需要花费一些时间来复制每个打开的文件的文件路径。

理想的情况是有一个工具可以一次性输出所有窗口的文件路径和程序路径(“C:\photoshop.exe” “C:\image.TIFF”),然后您可以将该信息放入批处理脚本中,以便使用程序逐个打开每个文件,或者如果您愿意,可以在同一批处理中一次性打开所有文件。那就太完美了。

为了加快速度,有没有办法复制所有活动窗口打开的文件的文件路径?一个小工具可以吐出所有当前任务栏项目的文件路径,应该相当容易!如果 Twinsplay 可以做到这一点,显然也可以以某种方式做到.....我在另一篇帖子中问过这个问题,这里。 可以 代码做吗?

由于微软没有为我们提供一个优雅的操作系统级一键解决方案,我们不应该尝试一个类似 Hibernate 的会话恢复方法,仅需第三方访问或修改Hibernate 缓存重新加载技巧ETC。

重新启动 Windows 应该是刷新以清除 RAM 并刷新所有内容,而不是保留所有内容,因此最好手动重新打开文件(同时记下您要在某些文件中操作的位置的一些细节),但这尽可能优雅。

答案2

我听说人们使用一个叫做CacheMyWork。它将重新打开您打开的应用程序,但不会打开您正在处理的文件(除非该程序具有这样的功能)。

另一种选择是,您可以回避这个问题,您可以在虚拟机中运行应用程序。然后当您回家时,您可以暂停虚拟机,并将虚拟机的状态保留到磁盘。然后在您返回时恢复虚拟机。这可以回避这个问题,因为有一天您将需要更新/修补虚拟机的操作系统。此外,您可能会受到性能影响(影响程度取决于您的操作)。

当谈到让一切保持开放以及机器从补丁中重新启动时,我和你是一样的。

答案3

2016 年了,微软仍然没有任何消息……我决定尝试一下vbscript。虽然效果不是很好,但它确实可以重新启动所有程序,在某些情况下甚至是 Windows。

第一个脚本将所有进程保存到指定文件夹(桌面)中的文本文件中,并将所有窗口名称保存到单独的文件中。第二个脚本从第一个脚本写入的文件中读取并启动所有进程。两者都应以扩展名 .vbs 保存。此外,保存窗口名称需要安装 Microsoft Word(不要问...)。

On Error Resume Next
Dim session, folder, Word, Tasks

Set Word = CreateObject("Word.Application")
Set Tasks = Word.Tasks

' folder is the folder in which the files will be created. Can also be instantiated by hardcoding a path
folder = getPathOfFolder("Desktop")
' The second argument of the function call (session.txt) is the filename of the file containing all window names
Set sessionFile = CreateFileAt(folder, "session.txt")

for Each Task in Tasks
    if Task.Visible Then
        sessionFile.WriteLine(Task.Name)
    End if
Next
sessionFile.Close
Word.Quit

' The second argument of the function call (processes.txt) is the filename of the file containing all processes
Set processesFile = CreateFileAt(folder, "processes.txt")
set processesList = getAllProcesses()

for Each Process in processesList
    processesFile.WriteLine(Process.CommandLine & "")
Next

processesFile.Close
MsgBox("Done!")




Function getPathOfFolder(path)
    ' Dim objShell As Object
    ' Dim strPath As String

    Set objShell = Wscript.CreateObject("Wscript.Shell")
    Path = objShell.SpecialFolders(path)
    getPathOfFolder = Path & "\"
End Function

Function CreateFileAt(filePath, fileName)
    Dim fso, session
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set session = fso.CreateTextFile(filePath & fileName, true)
    Set CreateFileAt = session
End Function

Function getAllProcesses()
    Const Computer = "." 
    Dim WMI, ProcessList
    Set WMI = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & Computer & "\root\cimv2")
    Query = "Select * FROM Win32_Process"
    Set ProcessList = WMI.ExecQuery(Query)
    Set getAllProcesses = ProcessList
End Function

On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(getPathOfFolder("Desktop") & "processes.txt", 1)

Do While file.AtEndOfStream = False
    Set Shell = CreateObject("Wscript.Shell")
    Shell.Run(file.ReadLine)
Loop

MsgBox("Done!")

Function getPathOfFolder(path)
    ' Dim objShell As Object
    ' Dim strPath As String

    Set objShell = Wscript.CreateObject("Wscript.Shell")
    Path = objShell.SpecialFolders(path)
    getPathOfFolder = Path & "\"
End Function

我还没有找到一种方法来以编程方式获取 user78017 每次重新启动时复制的文件路径。我想知道这个脚本在哪些程序中会打开所有打开的文件,在哪些程序中不会。如果有人想清理这段代码,请随时编辑帖子。

答案4

我花了一些时间来解决这个问题,因为这对我们的用户来说是一个大问题,

您能做的最好的解决方案就是恢复尽可能多的合格应用程序,但不幸的是,您无法优雅地恢复所有内容,就像什么都没有发生过一样!

这是在 Windows10 22H2 上测试的

  1. 从开始菜单,搜索Folder Options并按照以下步骤操作:

文件夹选项>>查看>>登录时恢复以前的文件夹窗口(选中该框)(这是为了恢复打开的窗口)

  1. 从开始菜单,搜索Sign in options并按照以下步骤操作:

登录选项>>重启应用程序>>自动保存我的可重启应用程序...(启用此功能)

  1. 在默认浏览器中,选中复选框以从上一个会话恢复

这是我恢复会话所能做到的极限,我也尝试过第三方应用程序,例如Cache my workSmart Close等。不幸的是,它们都过时了,帮不上什么忙。

我希望这对遇到此问题的人有所帮助。

相关内容