[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
Привет всем,
Возможно ли сделать код, который копирует екзешник и перезапускает систему в сейф мод. После входа в сейф мод код должен запустить екзешника автоматом?
Вот именно етот запуск не знаю как можно сделать.

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 3 года 5 месяцев
  • Сообщений: 86
  • Репутация:27

    [+] [-]
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SafeBoot
AlternateShell
лучше менять
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SafeBoot
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\SafeBoot
bcdedit /set {current} safeboot minimal
или аналогичные
bcdedit /set {current} safebootalternateshell yes
ребут
возвращать нормальную загрузку скорее всего придется вручную...
зы: как вернуть взад, экспериментируй - я этого не делал... -)))

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
JuraAD, спасибо, сразу проверяю. второй ребут не проблемма.
Только не понял где запускается екзешник после ребута в сейфмод. Вроде в код такое нет. aa

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 3 года 5 месяцев
  • Сообщений: 86
  • Репутация:27

    [+] [-]
AlternateShell
это то, что запускается в safemode (обычно cmd.exe)
bcdedit /set {current} safeboot minimal
это установить дефолтный режим (их там несколько просто safe, с сетью и т.п.)
возможно нужно еще таймер задержки меню убрать - типа немедленно (не помню параметр)
bcdedit /set {current} safebootalternateshell yes
нужно, не нужно не знаю, флаг загрузки AlternateShell (yes/no/убрать - проверь)
shutdown /r /t 0
быстрая перезагрузка
сохрани файл BCD - чёб не париться с восстановлением... и загрузочную флэху под рукой держи.
поисчи в и-нет доки, думаю много таких вопросов есть...

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
JuraAD, ок спасибо. Вроде понял. ab

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 4 года 7 месяцев
  • Сообщений: 626
  • Репутация:72

    [+] [-]
dimo70, aa Одноразовый запуск - прописать путь к нужной программе.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
ИЛИ ЗДЕСЬ
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
Gvint64, да именно одноразовый нужен.
Только ето в регистре, а как сделать как батник? aa
Например имеем 1.exe которое одноразово надо запустить в сейфмод минимал из C:\1.exe

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 4 года 7 месяцев
  • Сообщений: 626
  • Репутация:72

    [+] [-]
Как-то так. Исправил - должен в сейфе работать.
Reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" /v "*1" /t REG_SZ /d "C:\1.exe" /f
Где-то прочитал что Safemode конфликтует с Быстрым запуском - лучше на время отключать.
Docs Run and RunOnce


Последний раз редактировалось: Gvint64 (2021-11-24 13:59), всего редактировалось 4 раз(а)

[Цитировать]

    dimo70
  • 17296
  • Стаж: 7 лет
  • Сообщений: 3787
  • Репутация:27

    [+] [-]
  • Откуда: BG
Gvint64, спасибо.
Быстрый запуск в новое железо почти повсюду запущено.

_________________
Подпись отключена за нарушение правил форума

[Цитировать]

    BalAngel
  • 647
  • Стаж: 9 лет 8 месяцев
  • Сообщений: 258
  • Репутация:14

    [+] [-]
Не могу найти скрипт - заставить програму принять Net Framework версии выше
Помогите

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3868
  • Репутация:127

    [+] [-]
BalAngel, на всякий случай, а конфиг (file_name.exe.config) такого вида рядом с ехе-файлом не поможет?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Всем привет aa
Задача:
* Полуавтоматическое создание ярлыка в меню Пуск\Стандартные
* При запуске ярлыка происходит копирование в буфер текста
* Текст задается при создании ярлыка
* У ярлыка:
- сочетание клавиш для быстрого вызова
- свернутый в окно запуск
В данный момент использую утилиту Shortcut

синтаксис Shortcut

Shortcut [Version 1.11]
Creates, modifies or queries Windows shell links (shortcuts)
The syntax of this command is:
Shortcut.exe /F:filename /A:C|E|Q [/T:target] [/P:parameters] [/W:workingdir]
         [/R:runstyle] [/I:icon,index] [/H:hotkey] [/D:description]
/F:filename    : Specifies the .LNK shortcut file.
/A:action      : Defines the action to take (C=Create, E=Edit or Q=Query).
/T:target      : Defines the target path and file name the shortcut points to.
/P:parameters  : Defines the command-line parameters to pass to the target.
/W:working dir : Defines the working directory the target starts with.
/R:run style   : Defines the window state (1=Normal, 3=Max, 7=Min).
/I:icon,index  : Defines the icon and optional index (file.exe or file.exe,0).
/H:hotkey      : Defines the hotkey, a numeric value of the keyboard shortcut.
/D:description : Defines the description (or comment) for the shortcut.
Notes:
- Any argument that contains spaces must be enclosed in "double quotes".
- If Query is specified (/A:Q), all arguments except /F: are ignored.
- To find the numeric hotkey value, use Explorer to set a hotkey and then /A:Q
- To prevent an environment variable from being expanded until the shortcut
   is launched, use the ^ carat escape character like this: ^%WINDIR^%
Examples:
   /f:"%ALLUSERSPROFILE%\Start Menu\Programs\My App.lnk" /a:q
   /f:"%USERPROFILE%\Desktop\Notepad.lnk" /a:c /t:^%WINDIR^%\Notepad.exe /h:846
   /f:"%USERPROFILE%\Desktop\Notepad.lnk" /a:e /p:C:\Setup.log /r:3
An argument of /? or -? displays this syntax and returns 1.
A successful completion will return 0.
Упрощенно имею такой батник:
@echo off
cls
cd /d "%~dp0"
set "link_dir=%AppData%\Microsoft\Windows\Start Menu\Programs\Accessories"
set var=& set /p "var=Enter: "|| GoTo :1
Shortcut.exe /F:"%link_dir%\test.lnk" /A:C /T:"%ComSpec%" /P:"/c @echo off& echo|set /p=%var%| Clip" /R:7 /H:1585)
echo.
pause
exit /b
И в принципе все работает, но есть ограничения:
- Текст не может начинаться с пробела
- Нельзя использовать кавычки и символы: | & < >
Самое обидное, что не считая кавычек и начальных пробелов - остальное МОЖНО ОБОЙТИ:
Сейчас поле "Объект" созданного ярлыка имеет такое содержимое:
C:\Windows\System32\cmd.exe /c @echo off& echo|set /p=ANY_TEXT| Clip
Достаточно было бы добиться результата:
C:\Windows\System32\cmd.exe /c @echo off& echo|set /p"=ANY_TEXT"| Clip
и можно было бы использовать в тексте символы: | & < >
Проблема в том, что средствами батника не удается прописать строку в таком виде, Shortcut.exe не дает использовать кавычки внутри параметра (так как кавычками обрамляются сами параметры).
Что я уже только не пробовал, бьюсь второй день...
PS: наткнулся на вариант создания ярлыка без внешних программ:
mshta vbscript:Execute("Set x=CreateObject(""WScript.Shell"").CreateShortcut(""%link_dir%\test.lnk""):x.TargetPath=""%Comspec%"":x.Arguments=""/c @echo off& echo|set /p=%var%| Clip"":x.WindowStyle=""7"":x.HotKey=""CTRL+ALT+1"":x.Save():Close()")
Тоже работает, но та же проблема
+++
По идее, можно после SET /P сначала записать значение переменной в файл:
>"%link_dir%\test.test" echo "%var%"
А потом в ярлыке читать из этого файла:
Shortcut.exe /F:"%link_dir%\test.lnk" /A:C /T:"%ComSpec%" /P:"/c @echo off&<test.txt Clip" /R:7 /H:1585)
Хоть мне бы очень и очень хотелось избежать создания доп файлов, помимо самого ярлыка, но я уже и на это готов пойти.
Вот только теперь не могу додумать, как убрать обрамляющие двойные кавычки у записанного текста.
А записать без них не получится, так как снова будут проблемы, если в содержимое %var% попадут спецсимволы

[Цитировать]

    JuraAD
  • 28398
  • Стаж: 3 года 5 месяцев
  • Сообщений: 86
  • Репутация:27

    [+] [-]
Спецсимволы приходится экранировать:
" - "
<>& - ^
% - %
- иногда приходится удваивать, в зависимости как вызовы происходят и что вызывается...
Поэкспериментируй, не знаю каким Shortcut.exe пользуешься... Могу на js написать, vbs не люблю, но смысл тот-же... -)
Пример (отсыпаюсь, времени нет)
@echo off&setlocal enableextensions enabledelayedexpansion
set /p "x0=Enter: "
set "x0=%x0:"=""%"
set "x0=%x0:<=^<%"
set "x0=%x0:>=^>%"
set "x0=%x0:&=^&%"
set "x0=%x0:^%=^%^%%"
echo %x0%
endlocal&exit /b 0
mshta - для другого предназначен (приложение с использованием html), используй cscript
для js я так пишу - cmd файл
@if (0==1) @end /*
@echo off&setlocal enableextensions enabledelayedexpansion
cscript.exe %0 //E:JScript //Nologo
endlocal
exit /b 0 */
WScript.Echo("\tok");
и т.д

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
JuraAD, aa
экранировать само собой тоже пробовал, но это не подходит, мне ведь не на экран надо вывести.
Допустим я ввел:
1&2
В ярлык запишется:
C:\Windows\System32\cmd.exe /c @echo off& echo|set /p=1^&2| Clip
При выполнении этой команды скопируется только: 1
++++
90256
используй cscript для js я так пишу - cmd файл
вариант с cscript тоже находил, но с ним что-то незаладилось - сам я этими навыками не владею, а найденный пример у меня нормально не заработал, уже не помню деталей, и ещё вроде бы там не было всех нужных мне параметров ярлыка, добавить не получилось.. хотя даже если бы получилось, там бы я упёрся в ту же проблему - как сделать запись в ярлык с кавычками (...set /p "=%var%%"| Clip) ?

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 9 лет 3 месяца
  • Сообщений: 527
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Кажется что-то получилось - удалось записать значение переменной в кавычках в файл, а потом перезаписать файл убрав кавычки:
@echo off
cls
cd /d "%~dp0"
set "link_dir=%AppData%\Microsoft\Windows\Start Menu\Programs\Accessories"
:1
set var=& set /p "var=Enter: "|| GoTo :1
>"%link_dir%\test_1.txt" echo "%var%"
for /f "useback delims=" %%G in ("%link_dir%\test_1.txt") do >"%link_dir%\test_1.txt" (echo|set /p=%%G)
Shortcut.exe /F:"%link_dir%\test_1.lnk" /A:C /T:"%ComSpec%" /P:"/c @echo off& <test_1.txt Clip" /R:7 /H:1585)
echo.
pause
exit /b
по хорошему, наверное, стоит сначала писать в предварительный файл, потом перезаписывать в основной, а потом удалять предварительный... но я пока с этим не заморачивался
PS: все еще очень не хотелось бы оставлять дополнительных файлов, помимо ярлыка, так что если у кого-нибудь есть идеи, пожалуйста поделитесь)

Страница 65 из 94


Показать сообщения:    

Текущее время: 24-Дек 02:00

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы