Показать полную графическую версию : [решено] Выполнение комманд из реестра?
Пример.
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\RunOnce"; ValueType: string; ValueName: "reg.exe"; ValueData: "cmd.exe /c reg copy HKLM\Software\$$ HKCU /s /f &xcopy {win}\$\AppData {reg:HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList,ProfilesDirectory}\{username}\AppData /eciqhry &xcopy {win}\$\ProgramData {commonappdata} /eciqhry"; Flags: noerror; Permissions: everyone-full
Вопрос в следущем, раньше у меня была строка "RunOnce" = "reg copy HKLM\Software\$$ HKCU" и это работало, но потом я добавил &xcopy и что-то не стало выполняться.
Вобщем я пришёл к выводу, что лучше запускать всю строку под управлением cmd.exe /c Однако, хотелось бы знать как правильно и почему,
мне кажется этот вопрос касается ShellExecute, в том плане, что в cmd/bat возможно другие правила,
а в работе в открытом cmd.exe другие правила, поэтому хочется выяснить, чтобы не делать ошибок.
:)
Пример. »
Откуда пример? InnoSetup?!
Переведите на русский.
Откуда пример? InnoSetup?! »
InnoSetup, пример мой,
Переведите на русский. »
там ведь всё понятно..
[HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce]
"reg.exe"="cmd.exe /c reg copy HKLM\Software\$$ HKCU /s /f &xcopy D:\App C:\Users\Administrator\AppData /eciqhry &xcopy D:\Pro C:\ProgramData /eciqhry
Меня волнует только, почему xcopy без cmd.exe /c не работает из "пуск выполнить", что то же самое из RunOnce насколько я понимаю.
Хотя понятно, на то он и команд процессор, чтобы командовать
:)
Может быть дело даже не в xcopy, а в связке &амперсендов которым нужен cmd.exe?
Вобщем ликбез)
Что такое «$$», «$»?
но потом я добавил &xcopy и что-то не стало выполняться. »
Естественно. Поскольку «&» — прерогатива исключительно командного процессора.
мне кажется этот вопрос касается ShellExecute, в том плане, что в cmd/bat возможно другие правила, »
«ShellExecute» тут совершенно не при чём.
В общем и целом: то, что есть команда, должно быть заключено в кавычки:
{%COMSPEC} /c"reg copy HKLM\Software\$$ HKCU /s /f &xcopy {win}\$\AppData {reg:HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList,ProfilesDirectory}\{username}\AppData /eciqhry &xcopy {win}\$\ProgramData {commonappdata} /eciqhry"
Заработает ли это — смотрите, проверяйте сами.
Чтобы указать в одной строке несколько команд, следует разделить их
символами '&&' и заключить в кавычки. Кроме того, из соображений
совместимости, /X означает то же, что и /E:ON, /Y то же, что и /E:OFF
и /R то же, что и /C. Все прочие ключи командной строки игнорируются.
Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка, а обработка символов
кавычек (") ведется по следующим правилам:
1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:
- ключ /S отсутствует
- есть ровно два символа кавычек
- между ними нет других специальных символов, как то: &<>()@^|
- между ними имеются один или несколько пробелов
- строка, заключенная в кавычки, является именем исполнимого
файла.
2. В противном случае, проверяется первый символ, и если он является
символом кавычек, то он удаляется, также удаляется последний
символ кавычек в командной строке, а весь текст после этого
последнего символа кавычек сохраняется.
Естественно. Поскольку «&» — прерогатива исключительно командного процессора. »
Теперь понятно.
Что такое «$$», «$»? »
Это я так папки называю.
«ShellExecute» тут совершенно не при чём. »
Здесь я имею ввиду, что есть разница выполнение команд в cmd или из проводника, но из вопроса об амперсенд стало понятно почему)
{%COMSPEC} /c »
Интересно. Обычно я избегаю лишний раз квотировать, хотя себе же хуже)
Всётаки у меня не получилось! Либо xcopy не копирует скрытые файлы, либо тут дело в другом, может быть что-то ещё.
Вот такой набор ключей использовал /eciqhry, хотя /s - системные я позабыл, может быть в этом причина.
Вобщем я хотел скопировать в папки Administrator\AppData\Local и Administrator\AppData\Roaming свои папки с контентом
из раздела реестра RunOnce через cmd /c, очевидно что не скопировались папки в скрытые директории, другие, например,
скопировались. Видимо надо было /s добавить.
Профиль Administrator со всеми нужными подпапками ведь должен существовать когда RunOnce выполняется..
Вход в систему тоже под Администратором разумеется, поэтому тут права роль не играют.
Что такое «$$», «$»? »Это я так папки называю. »
Ясно.
Здесь я имею ввиду, что есть разница выполнение команд в cmd или из проводника, но из вопроса об амперсенд стало понятно почему) »
Говоря о «ShellExecute» обычно подразумевается запуск ассоциированного с типом файла приложения.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.