6

Я работаю под управлением Windows 7 64 бит. Когда я выключаю свой компьютер, на рабочем столе открываются многие программы. Когда я запускаю свой компьютер, я хочу, чтобы эти программы открывались автоматически. Я знаю о SaveMyCache, это требует от меня ставить галочки каждый раз, когда я выключаю свой компьютер, я хочу что-то автоматическое.

3 ответа3

9

Что-то, что близко к тому, что вы спрашиваете: включите гибернацию в управлении питанием и вместо выключения ПК используйте опцию гибернации. Это отключает питание вашего компьютера и восстанавливает его в состояние, в котором вы были, когда вы выключили систему.

Кроме этого, нет встроенной функциональности, которая делает то, что вы просите. Диспетчер перезапуска Windows был создан для подобных ситуаций, но программное обеспечение должно поддерживать его, и это обычно используется только при установке нового программного обеспечения или при установке обновлений.

2

Поэтому я решил создать этот скрипт Powershell.

Проект Github здесь.

Версия с фиксацией аргументов процесса.

Выполненные действия:

  1. Удалить предыдущий файл.
  2. Проверьте запущенные процессы.
  3. Отфильтруйте список по пути, содержащему определенное слово (Программа), в котором предполагается, что все программы установлены либо в Program Files, либо в Program Files (x86).
  4. Получить абсолютные пути к исполняемым файлам процессов, которые были найдены
  5. Запишите пути к временному файлу во временном каталоге.
  6. Переместите временный файл в каталог назначения, который находится в папке автозагрузки пользователя.

Плюсы:

  • Написан на PowerShell, поэтому код является родным и должен работать в Windows Vista и выше.
  • Работает.

Минусы:

  • Программы, установленные по другому пути, а не по программным файлам, не будут обнаружены в этой версии. Это, конечно, необходимо, чтобы избежать запуска собственных процессов Windows, таких как explorer.exe и так далее. Однако если у вас есть путь, например, D:\Apps куда вы также устанавливаете программы, вы можете изменить строку

    $ _.Путь-матч "Программа"

    в

    $ .Путь - соответствует "Программа" - или $.Path -match "D:\Apps"

    и все равно будет работать.

Теперь код скрипта:

###############################
# AUTOMATIC STARTUP GENERATOR #
# ASGEN v.1.0 by mnmnc @ 2014 # 
###############################

# VARIABLES

    # CURRENT PATH
    $current = $(pwd).ToString()

    # DESTINATION PATH
    $destination_path = "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\programs.bat"

# MOVING TO TEMP    
cd $env:systemroot\Temp

# REMOVING OLD FILE
del $destination_path

# EMPTY ARRAYS
$arr_names = @()
$arr_paths = @()

# FILLING ARRAYS
Get-Process | Where-Object {$_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.Path }

# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++) 
{ 
    $out = "`"" + $arr_paths[$i] + "`""
    write-output $out | out-file "programs.bat" -append -Encoding ascii
}

# INFO
Write-host "`nFolowwing programs will be started on next boot:`n"
cat programs.bat
Write-host "`n"

# MOVING TO STARTUP FOLDER
mv programs.bat "$destination_path"

# RETURNING
cd $current

exit

Просто скопируйте этот код и вставьте его в файл shutdown.ps1 на рабочем столе. Сохраните и закройте этот файл. Теперь создайте второй файл shutdown.bat и поместите код

powershell shutdown.ps1
shutdown -s -t 1

в этом файле. Сохраните и закройте файл bat. Теперь вы можете переместить оба файла в предпочтительный каталог. После этого вы можете щелкнуть правой кнопкой мыши по файлу bat и создать ярлык для этого файла. Затем щелкните правой кнопкой мыши по ярлыку на этот раз и выберите Pin to Start Menu. Это добавит ярлык в меню «Пуск».

Теперь каждый раз, когда вы хотите закрыть компьютер и сохранить запущенные программы для автоматического запуска после загрузки, вы можете использовать этот ярлык.


Изменить - включая аргументы командной строки

Поскольку вы также хотели бы сохранить аргументы командной строки процесса, вы должны изменить разделы Заполнение массивов и Создание файла на следующие:

# FILLING ARRAYS
Get-WmiObject Win32_Process | Where-Object { $_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.CommandLine;  }

# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++) 
{ 
    $out =  $arr_paths[$i] 
    write-output $out | out-file "programs.bat" -append -Encoding ascii
}

Изменение заключается в использовании WMI вместо get-process. Кроме того, кавычки должны быть опущены на этот раз.


уведомление

В случае, если у вас возникла ошибка при выполнении сценария, возможно, у вас неверный параметр политики выполнения для powershell. Чтобы изменить это, вы должны открыть консоль PowerShell как администратор и ввести Set-ExecutionPolicy Unrestricted и ввести Y когда вас попросят подтвердить. Вот и все. Должно работать нормально.

0

Другой вариант - перетащить ссылки на программное обеспечение для запуска в папку «Автозагрузка» в меню «Пуск» - это медленно, но работает. Тем не менее, он не открывает «ранее» открытые программы, а только набор настроек.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .