2015-07-10 2 views
0

Друзья, я пишу скрипт, который делает много вещей - установите мое приложение + другое программное обеспечение с открытым исходным кодом, настройте службу s/w как службу, выполните пакетные файлы делать некоторые вещи и т. д.Inno Setup: выполнить командный/пакетный файл после завершения процесса установки

  1. Я установил некоторые переменные среды в начале. Они, конечно, не вступают в силу до тех пор, пока скрипт Inno не завершит выполнение (то есть установка завершается).
  2. Для установки службы необходимы переменные окружения.
  3. Команды для установки, настройки и запуска службы находятся в пакетном файле, который мне нужно выполнить после завершения установки. Мне нужно выполнить этот командный файл только один раз.

Как выполнить этот командный файл после завершения установки, используя Inno? Это может произойти сразу после завершения процесса установки или запуска системы при перезагрузке системы. Возможно ли это благодаря скрипту Inno?

Или есть способ, которым переменные среды могут вступить в силу, чтобы мой командный файл мог работать?

Я знаю, что есть программы установки, которые выполняют часть установки после того, как пользователь завершил процесс установки, и система перезапустилась. Поддерживает ли Inno такую ​​функциональность?

Я не уверен, что метод CurStepChanged + ssPostInstall будет работать здесь, поскольку он будет по существу тем же самым окружением, с которого начинал Инно, и мои переменные еще не действуют.

Если это невозможно сделать с помощью скрипта Inno, я поместим командный файл при запуске системы - в этом случае мне нужно будет проверить, установлена ​​ли служба уже запущена и предпринять соответствующие действия. Но это было бы грубо.

Помогите с любыми указателями/предложениями.

Спасибо.

+0

* ... Они, конечно, не вступают в силу до тех пор, пока скрипт Inno не завершит выполнение ... * Вы можете использовать функцию SetEnvironmentVariable для ее установки для процесса установки (процессы, созданные из нее, наследуют это). – TLama

ответ

1

Чтобы запланировать пакетный файл, который будет работать на следующей ПУСК/входа в систему, добавьте значение HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce ключ:

[Registry] 
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\RunOnce"; \ 
    ValueType: string; ValueName: "MyProg"; ValueData: """{app}\MyBatch.bat""" 

Значение в RunOnce ключа автоматически удаляется с помощью Windows, когда программа/пакетной запускается.

Читайте о Run and RunOnce Registry Keys:

По умолчанию значение ключа RunOnce удаляется до командной строки запускается. Вы можете префикс имени значения RunOnce с восклицательным знаком (!), Чтобы отложить удаление значения до тех пор, пока команда не запустится. Без префикса восклицательной точки, если операция RunOnce завершилась неудачно, соответствующая программа не будет запрашиваться при следующем запуске компьютера.

выполнения заказа:

Если более чем одна программа зарегистрирована под какой-либо конкретной ключ, порядок, в котором эти программы работают неопределенна.

На самом деле программы работают параллельно.Некоторые из записей легко могут быть приложением, которое выполняется до конца сеанса Windows. Поэтому Windows не может дождаться завершения программы, прежде чем запускать другую.

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

+0

Спасибо Мартин. Что происходит с записью реестра после запуска командного файла при следующем запуске? И будет ли это работать только один раз? Я попробую. –

+0

Спасибо Мартин. Это было полезно. Мне просто интересно, могу ли я заказать командные файлы для запуска в определенном порядке или они будут выполняться в порядке появления ключей в реестре? –

+0

Спасибо Мартин ... –

Смежные вопросы