Вопрос

В проекте установки допустимы исполняемые файлы, такие как ".exe, .dll, .js, .vbs", но нет способа запустить .bat файл в Пользовательском действии.

Вопрос в том, как запустить *.bat файлы во время установки?

Это было полезно?

Решение

Что ж, после долгих поисков, проб и ошибок я решил эту проблему.Я не уверен, что это лучший способ, но он работает.

Вот такой сценарий:У меня есть приложение, которое я хотел бы развернуть с помощью проекта установки Visual Studio.В дополнение к файлам моего приложения я хотел бы создать подкаталог в целевом каталоге, содержащий пакетный файл (.bat).Я бы хотел, чтобы этот файл был запущен в конце процесса установки.

Вот что вы делаете:

  1. Создайте проект установки и настройте, как обычно, включая подкаталог, в который вы будете размещать свой пакетный файл (вы можете просто поместить его непосредственно в папку приложения, если вы не хотите, чтобы он находился в подкаталоге).
  2. В представлении "Файловая система" (щелкните правой кнопкой мыши на проекте в Обозревателе решений-> Просмотр-> Файловая система) добавьте пакетный файл, который вы хотите выполнить и cmd.exe (C:\Windows\System32\cmd.exe)
  3. Откройте представление "Пользовательские действия" (щелкните правой кнопкой мыши по проекту в Обозревателе решений-> Просмотр-> Пользовательские действия).
  4. Щелкните правой кнопкой мыши на "Зафиксировать" и выберите "Добавить пользовательское действие".
  5. Перейдите к и выберите cmd.exe .
  6. Откройте панель свойств для вновь созданного пользовательского действия.
  7. Удалить / Зафиксировать из свойства Arguments.
  8. Войти: /c "[TARGETDIR]subdirectoryname\batchfile.bat" в свойстве Arguments, где subdirectoryname должно быть заменено именем вашего подкаталога (если вы помещаете пакетный файл в подкаталог, как это сделал я...если вы этого не сделали, значение должно быть /c "[TARGETDIR]batchfile.bat") и пакетный файл.bat должно быть именем вашего пакетного файла.

Вот и все.Теперь пакетный файл будет выполнен после завершения остальной части процесса установки.

Вот пример для наглядности:

Мой пакетный файл: бла.летучая мышь
Мой подкаталог: майдир

Значение аргументов для моего пользовательского таргетинга на действия cmd.exe тогда было бы

/c "[TARGETDIR]mydir\blah.bat"

Надеюсь, это кому-нибудь поможет!

Другие советы

  1. Проверьте эту статью (статья устарела), хотя она находится в VB.NET это относится и к C #.Наиболее важной частью является (переведено на C #) создание новой библиотеки классов и добавление нового класса установщика со следующим содержимым:Как указано в статье, затем вы можете создать новое пользовательское действие со ссылкой на ваш только что созданный проект.

    override void Commit(IDictionary savedState)
    {
         base.Commit(savedState);
         System.Diagnostics.Process.Start("myApp.bat","your bat arguments");
    }
    
  2. Теперь мы добавляем пакетный файл в ваш установочный проект.Создайте проект установки и настройте, как обычно, включая подкаталог, в который вы будете размещать свой пакетный файл (вы можете просто поместить его непосредственно в папку приложения, если вы не хотите, чтобы он находился в подкаталоге).

  3. В представлении "Файловая система" (щелкните правой кнопкой мыши на проекте в Обозревателе решений-> Просмотр-> Файловая система) добавьте пакетный файл, который вы хотите выполнить.

  4. Создайте проект установщика.

Еще один способ достичь того же результата - поместить файл .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)

Это то, как я устанавливаю свои пользовательские действия:

enter image description here

Я надеюсь, что это может вам помочь!

Если вы пытаетесь запустить пакетный файл с относительными путями во время процесса установки, это наверняка завершится неудачей.Это связано с тем, что пакетный файл будет учитывать каталог, в котором запущен установщик, а не то, куда устанавливались файлы.Используйте установщики, которые копируют пакетные файлы во временный каталог.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top