Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Выполнение комманд из реестра? (http://forum.oszone.net/showthread.php?t=277794)

semiono 15-02-2014 19:18 2309574

Выполнение комманд из реестра?
 
Пример.
Код:

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 другие правила, поэтому хочется выяснить, чтобы не делать ошибок.
:)

Iska 15-02-2014 19:33 2309582

Цитата:

Цитата semiono
Пример. »

Откуда пример? InnoSetup?!

Переведите на русский.

semiono 15-02-2014 21:29 2309636

Цитата:

Цитата Iska
Откуда пример? InnoSetup?! »

InnoSetup, пример мой,
Цитата:

Цитата Iska
Переведите на русский. »

там ведь всё понятно..

[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?
Вобщем ликбез)

Iska 15-02-2014 21:43 2309644

Что такое «$$», «$»?

Цитата:

Цитата semiono
но потом я добавил &xcopy и что-то не стало выполняться. »

Естественно. Поскольку «&» — прерогатива исключительно командного процессора.

Цитата:

Цитата semiono
мне кажется этот вопрос касается 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"
Заработает ли это — смотрите, проверяйте сами.

Цитата:

Цитата cmd.exe /?
Код:

Чтобы указать в одной строке несколько команд, следует разделить их
символами '&&' и заключить в кавычки. Кроме того, из соображений
совместимости, /X означает то же, что и /E:ON, /Y то же, что и /E:OFF
и /R то же, что и /C.  Все прочие ключи командной строки игнорируются.

Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка, а обработка символов
кавычек (") ведется по следующим правилам:

    1.  Если выполняются все перечисленные ниже условия, то символы
        кавычек в командной строке сохраняются:

        - ключ /S отсутствует
        - есть ровно два символа кавычек
        - между ними нет других специальных символов, как то: &<>()@^|
        - между ними имеются один или несколько пробелов
        - строка, заключенная в кавычки, является именем исполнимого
          файла.

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



semiono 16-02-2014 16:01 2309930

Цитата:

Цитата Iska
Естественно. Поскольку «&» — прерогатива исключительно командного процессора. »

Теперь понятно.
Цитата:

Цитата Iska
Что такое «$$», «$»? »

Это я так папки называю.
Цитата:

Цитата Iska
«ShellExecute» тут совершенно не при чём. »

Здесь я имею ввиду, что есть разница выполнение команд в cmd или из проводника, но из вопроса об амперсенд стало понятно почему)
Цитата:

Цитата Iska
{%COMSPEC} /c »

Интересно. Обычно я избегаю лишний раз квотировать, хотя себе же хуже)

Всётаки у меня не получилось! Либо xcopy не копирует скрытые файлы, либо тут дело в другом, может быть что-то ещё.
Вот такой набор ключей использовал /eciqhry, хотя /s - системные я позабыл, может быть в этом причина.
Вобщем я хотел скопировать в папки Administrator\AppData\Local и Administrator\AppData\Roaming свои папки с контентом
из раздела реестра RunOnce через cmd /c, очевидно что не скопировались папки в скрытые директории, другие, например,
скопировались. Видимо надо было /s добавить.

Профиль Administrator со всеми нужными подпапками ведь должен существовать когда RunOnce выполняется..
Вход в систему тоже под Администратором разумеется, поэтому тут права роль не играют.

Iska 16-02-2014 19:05 2310016

Цитата:

Цитата semiono
Цитата:

Цитата Iska
Что такое «$$», «$»? »

Это я так папки называю. »

Ясно.

Цитата:

Цитата semiono
Здесь я имею ввиду, что есть разница выполнение команд в cmd или из проводника, но из вопроса об амперсенд стало понятно почему) »

Говоря о «ShellExecute» обычно подразумевается запуск ассоциированного с типом файла приложения.


Время: 21:20.

Время: 21:20.
© OSzone.net 2001-