В проекте установки исполняемые файлы, такие как ".exe,.dll,.js,.vbs", являются приемлемыми, но нет способа запустить файл .bat
в пользовательском действии.
Вопрос заключается в том, как запускать файлы *.bat
во время установки?
В проекте установки исполняемые файлы, такие как ".exe,.dll,.js,.vbs", являются приемлемыми, но нет способа запустить файл .bat
в пользовательском действии.
Вопрос заключается в том, как запускать файлы *.bat
во время установки?
Хорошо, после долгих поисков и проб и ошибок я решил это. Я не уверен, что это лучший способ, но он работает.
Здесь сценарий: у меня есть приложение, которое я хотел бы развернуть через проект установки Visual Studio. В дополнение к моим файлам приложений, я хотел бы создать подкаталог в целевом каталоге, который содержит пакетный (.bat) файл. Я хочу, чтобы этот файл запускался в конце процесса установки.
Вот что вы делаете:
/c "[TARGETDIR]subdirectoryname\batchfile.bat"
в свойстве Arguments, где имя подкаталога должно быть заменено именем вашего подкаталога (если вы поместите пакетный файл в подкаталог, как я,... если вы это сделали 't, значение должно быть /c "[TARGETDIR]batchfile.bat"
), а batchfile.bat должно быть именем файла вашего пакетного файла.Что это. Теперь командный файл будет выполнен после завершения оставшейся части процесса установки.
Вот пример для ясности:
Мой командный файл: blah.bat
Мой подкаталог: mydir
Значением аргументов для моего настраиваемого таргетинга action cmd.exe будет
/c "[TARGETDIR]mydir\blah.bat"
Надеюсь, что это поможет кому-то!
Проверьте эту статью (статья устарела), хотя она и в VB.NET применяется к С#. Наиболее важная часть (перевод на С#), создающая новую библиотеку классов, и добавление нового класса установщика со следующим содержимым: Как указано в статье, вы можете создать новое настраиваемое действие со ссылкой на только что созданный проект.
override void Commit(IDictionary savedState)
{
base.Commit(savedState);
System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
}
Теперь мы добавляем пакетный файл в ваш проект установщика. Создайте проект настройки и настройте, как обычно, включая подкаталог, в который вы поместите свой командный файл (вы можете просто поместить его в папку приложения напрямую, если вы не хотите его в подкаталоге).
В представлении "Файловая система" (щелкните правой кнопкой мыши по проекту в Solution Explorer- > View- > File System) добавьте командный файл, который вы хотите выполнить.
Создайте проект установщика.
Другим способом достижения одного и того же результата является файл .vbs в пользовательских действиях, которые запускают соответствующий .bat файл. Следующий код - "RunRegisterComponents.vbs", который я помещал в папку приложения-приложения. Конечно, я помещаю [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)
Вот как я устанавливаю свои пользовательские действия:
Надеюсь, это поможет вам!
Если вы пытаетесь запустить пакетный файл с относительными путями во время процесса установки, это наверняка не удастся. Это потому, что командный файл учитывает каталог, в котором работает установщик, а не там, где были установлены файлы. Используйте установщики установщика, которые копируют пакетные файлы во временный каталог.