Спасибо за ответ, Болди. Это именно то, что я подумал и сделал небольшой тест. У меня есть простое веб-приложение ASP .NET с одной меткой, один проект библиотеки классов, у которого есть метод переопределения Install (создает пакетный файл и выполняет его), и wand-проект WebSetup, который фактически устанавливается, и во время установки он выполняет метод Install из проект библиотеки классов. Вот код -
1) Проект ClassLibrary - MyCustomAction
<RunInstaller(True)> _
Public Class SetupAction
Inherits Installer
Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)
MyBase.Install(stateSaver)
Try
My.Computer.FileSystem.WriteAllText("E:\SetupTest.txt", Environment.NewLine + "File created from MyCustomAction project", True)
'Shell("SQLCMD -S Dev1 -d Prac -i ""E:\Copy of CreateTable1.sql""", AppWinStyle.MinimizedFocus, True, 5000)
File.WriteAllText("E:\Test.bat", "SQLCMD -S Dev1 -d Prac -i ""E:\CreateTable1.sql""")
Process.Start("E:\Test.bat")
Catch ex As Exception
My.Computer.FileSystem.WriteAllText("E:\ErrorLog.txt", Environment.NewLine + "Exception: " + ex.Message, True)
Finally
End Try
End Sub
End Class
2) Проект ASP .NET - MyApplication
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Label1.Text = "Current Time: " + Now.ToString
End Sub
End Class
3) Проект WebSetup - MyApplicationSetup
- Я добавил в него выходные данные проекта из вышеупомянутых проектов
- Я добавил новый CustomAction «Tnstall», ссылаясь на него в выводе проекта библиотеки классов MyCustomAction
- Когда я собираю установщик msi и устанавливаю приложение веб-установки, оно включается (копирует выходные файлы), а также создает файлы SetupTest.txt, Test.bat, но не выполняет ни команды командной строки Shell, ни Process.Start () успешно.
- После создания файла bat, если я дважды щелкну вручную, он выполнит файл сценария sql.
В качестве примечания: если я запускаю код CustomAction в отдельном приложении для Windows, он отлично работает. Итак, похоже, что во время установки, он не может выполнять команды командной строки (хотя я вижу cmd.exe / SQLCMD.exe в диспетчере задач). Я не уверен, что это будет проблема с разрешениями, но я нахожусь в группе администраторов и у меня есть необходимые разрешения.
Возможно, неуместно писать эти комментарии в разделе «Мой ответ», но хотел дать подробное объяснение ситуации. Я действительно застрял с этим, и было бы очень полезно, если кто-то может бросить указатели на улучшение / альтернативные методы. Заранее спасибо и очень ценю помощь.