Как запустить файл “.bat” во время установки?
-
19-09-2019 - |
Вопрос
В проекте установки допустимы исполняемые файлы, такие как ".exe, .dll, .js, .vbs", но нет способа запустить .bat
файл в Пользовательском действии.
Вопрос в том, как запустить *.bat
файлы во время установки?
Решение
Что ж, после долгих поисков, проб и ошибок я решил эту проблему.Я не уверен, что это лучший способ, но он работает.
Вот такой сценарий:У меня есть приложение, которое я хотел бы развернуть с помощью проекта установки Visual Studio.В дополнение к файлам моего приложения я хотел бы создать подкаталог в целевом каталоге, содержащий пакетный файл (.bat).Я бы хотел, чтобы этот файл был запущен в конце процесса установки.
Вот что вы делаете:
- Создайте проект установки и настройте, как обычно, включая подкаталог, в который вы будете размещать свой пакетный файл (вы можете просто поместить его непосредственно в папку приложения, если вы не хотите, чтобы он находился в подкаталоге).
- В представлении "Файловая система" (щелкните правой кнопкой мыши на проекте в Обозревателе решений-> Просмотр-> Файловая система) добавьте пакетный файл, который вы хотите выполнить и cmd.exe (C:\Windows\System32\cmd.exe)
- Откройте представление "Пользовательские действия" (щелкните правой кнопкой мыши по проекту в Обозревателе решений-> Просмотр-> Пользовательские действия).
- Щелкните правой кнопкой мыши на "Зафиксировать" и выберите "Добавить пользовательское действие".
- Перейдите к и выберите cmd.exe .
- Откройте панель свойств для вновь созданного пользовательского действия.
- Удалить / Зафиксировать из свойства Arguments.
- Войти:
/c "[TARGETDIR]subdirectoryname\batchfile.bat"
в свойстве Arguments, где subdirectoryname должно быть заменено именем вашего подкаталога (если вы помещаете пакетный файл в подкаталог, как это сделал я...если вы этого не сделали, значение должно быть/c "[TARGETDIR]batchfile.bat"
) и пакетный файл.bat должно быть именем вашего пакетного файла.
Вот и все.Теперь пакетный файл будет выполнен после завершения остальной части процесса установки.
Вот пример для наглядности:
Мой пакетный файл: бла.летучая мышь
Мой подкаталог: майдир
Значение аргументов для моего пользовательского таргетинга на действия cmd.exe тогда было бы
/c "[TARGETDIR]mydir\blah.bat"
Надеюсь, это кому-нибудь поможет!
Другие советы
Проверьте эту статью (статья устарела), хотя она находится в VB.NET это относится и к C #.Наиболее важной частью является (переведено на C #) создание новой библиотеки классов и добавление нового класса установщика со следующим содержимым:Как указано в статье, затем вы можете создать новое пользовательское действие со ссылкой на ваш только что созданный проект.
override void Commit(IDictionary savedState) { base.Commit(savedState); System.Diagnostics.Process.Start("myApp.bat","your bat arguments"); }
Теперь мы добавляем пакетный файл в ваш установочный проект.Создайте проект установки и настройте, как обычно, включая подкаталог, в который вы будете размещать свой пакетный файл (вы можете просто поместить его непосредственно в папку приложения, если вы не хотите, чтобы он находился в подкаталоге).
В представлении "Файловая система" (щелкните правой кнопкой мыши на проекте в Обозревателе решений-> Просмотр-> Файловая система) добавьте пакетный файл, который вы хотите выполнить.
Создайте проект установщика.
Еще один способ достичь того же результата - поместить файл .vbs в пользовательские действия, которые запускают соответствующий файл .bat.Следующий код - это "RunRegisterComponents.vbs", который я поместил в папку приложения setup.Конечно, я поместил [TARGETDIR] в качестве параметра .vbs в окне свойств Visual Studio.
dim WshShell
Set WshShell = CreateObject("WScript.Shell")
' Read the "CustomActionData" property holding the install directory.
dim programDir
programDir= property("CustomActionData")
' Make the batch full file name and parameter
commandString = chr(34) & programDir & "RegisterComponents.bat" & chr(34) & " " & chr(34) &
programDir& chr(34)
' Set the current directory
WshShell.CurrentDirectory = programDir
' Run batch.
ret = WshShell.Run (commandString, 0, 0)
Это то, как я устанавливаю свои пользовательские действия:
Я надеюсь, что это может вам помочь!
Если вы пытаетесь запустить пакетный файл с относительными путями во время процесса установки, это наверняка завершится неудачей.Это связано с тем, что пакетный файл будет учитывать каталог, в котором запущен установщик, а не то, куда устанавливались файлы.Используйте установщики, которые копируют пакетные файлы во временный каталог.