Нужна ли SQL Server 2008 R2 Express перезагрузка компьютера после установки? - PullRequest
0 голосов
/ 19 июля 2011

У меня есть загрузчик, который объединяет следующие компоненты:

SQL Server 2008 R2 -> Пакетный файл инициализации базы данных -> MSI продукта

SQL Server устанавливается без вывода сообщений с использованиемфайл Configuration.INI.Там нет проблем.

Проблема заключается в пакетном файле инициализации БД.Пакетные файлы вызывают две команды OSQL, передавая файл .SQL (с помощью флага -i) для удаления базы данных и создания базы данных.

Когда я отображаю% ERRORLEVEL% сразу после вызовадля OSQL уровень ошибки составляет 9009 .У меня есть Google, но никаких значимых результатов не получилось.

Я перезапускаю службу (MSSQL $ SQLExpress) после установки SQL 2008, просто чтобы быть уверенным.

Вот странная часть.Если я запускаю установку SQL Server 2008 до запуска загрузчика, он работает нормально.Я не сделал ничего особенного, я просто установил его (без перезагрузки и т. Д.).

Кроме того, если на компьютере уже установлен SQL 2008, загрузчик пропустит установку SQL 2008 и перейдет прямо кИнициализация БД.В этом случае БД будет успешно инициализирована.

Любые предложения о том, как действовать?

РЕДАКТИРОВАТЬ

После изучения этого, янашел это:

Интерпретатор команд (командная строка) устанавливает ERRORLEVEL 9009, когда пакет пытается выполнить программу, которая не найдена.

Итак, почему SQLCMD небыть найденным?Кстати, я вызываю команду SQLCMD в командном файле так:

SQLCMD -S <> -E -I <>

1 Ответ

1 голос
/ 19 июля 2011

В конце концов, проблема заключается в том, что, когда процесс порожден, копия переменных среды «загружается» с ним. Если в любое время значение этих переменных среды было изменено, «копия», которая была загружена в процесс, не будет обновлена.

В моем случае, когда установщик SQL был установлен, он добавил свой путь к корзине к переменной% PATH%:

C: \ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \

Но значение% PATH%, которое было загружено в загрузчик, не имеет этого пути, поэтому пакетный файл возвращает уровень ошибки 9009 (Программа не найдена), когда он называется «sqlcmd».

Чтобы это исправить, мне нужно как-то «обновить» значение переменной среды% PATH% перед началом установки каждого компонента. Я сделал это с этим кодом:

    internal static void RefreshEnvironmentVariable(string variable)
    {
        string latestMachineValue = Environment.GetEnvironmentVariable(variable, EnvironmentVariableTarget.Machine);

        Environment.SetEnvironmentVariable(variable, latestMachineValue, EnvironmentVariableTarget.Process);
    }
...