Я пытаюсь создать установщик MSI, который также устанавливает SQL Server (если у пользователя есть файл disk / iso).
Как это должно работать:
- он запускает пакетный файл, и пакетный файл находит файл setup.exe на любом диске.
- Пакетный файл принимает 2 аргумента, расположение файла конфигурации и каталог установки MSI
- Затем он ищет файл setup.exe и запускает его вместе с файлом конфигурации, выполняя автоматическую установку.
Аргументы кажутся совершенно такими же, как и я.
@echo off
::this file searches for the setup.exe and then installs the server.
::ARGUMENTS:Complete Path to the Configuration File
::ATTENTION: this will need to search for a more unique file in the future!
::loop through each letter for a drive
for %%A in (D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (
::check if file exists, send any error messages to NUL, destroying it(e.g. no disk in drive) and installif found
DIR "%%A:/setup.exe" 1>NUL 2>&1 && call:install %%A %1 %2
::if we reach here the file ahsn't been found
if %%A == Z (
@echo Please insert the Microsoft SQL Server 2008 R2 disk and try again.
pause
exit
)
)
:install
net user grp-db ..grp.. /add
echo Installing SQL Server 2008 R2 with %~2
date/t
time /t
::"%~1:\setup.exe" /ConfigurationFile="%~2"
DIR "%~2"
date/t
time /t
pause
echo Creating ODBC data source.. with %~3
::"%~3"ODBCCONF.exe CONFIGSYSDSN "SQL Server" "DSN=GRP_DSN | Description=GRP Data Source | SERVER=(local) | Trusted_Connection=Yes"
exit
goto:eof
Запуск командного файла из командной строки работает отлично, как и ожидалось, но в MSI это вызывает StackOverflowException. Проверка Сводного файла в каталоге SQL говорит
Пользователь отменил операцию. Тип исключения: Microsoft.SqlServer.Chainer.Infrastructure.CancelException.
Есть ли у кого-нибудь идеи, с чего начать?