2011-07-19 10 views
0

私は、ブートストラップを持っているチェーン、以下のコンポーネントのインストール:インストール後にSQL Server 2008 R2 Expressにマシンを再起動する必要はありますか?

のSQL Server 2008 R2 - >データベースの初期化バッチファイル - >製品MSI

SQL Serverが黙っConfiguration.INIファイルを使用してインストールされている

。問題はない。

問題はDB初期化バッチファイルにあります。バッチ・ファイルは、2つのOSQLコマンドを呼び出し、データベース・ドロップとデータベース作成のための.SQLファイル(-iフラグ経由)を与えます。

OSQLの呼び出し直後に%ERRORLEVEL%をエコーし​​た場合、エラーレベルはです。私はそれをGoogleが持っていたが、意味のある結果はなかった。

SQL 2008のインストール後にサービス(MSSQL $ SQLExpress)を再起動しています。

ここは奇妙な部分です。ブートストラップを実行しているの前にSQL Server 2008のインストールを実行すると正常に動作します。私は何も特別なことをしなかった、私はそれをインストールした(再起動など)。

また、SQL 2008がマシンにインストールされている場合、ブートストラップはSQL 2008のインストールをスキップし、DB初期化に直接進みます。このシナリオでは、DBは正常に初期化されます。

進め方についてのご意見はありますか? バッチの試みが検出されないプログラムを実行する際

コマンドインタプリタ(コマンドプロンプト)がERRORLEVEL 9009を設定します:EDIT

はさらに、このに見た後、私はこれを見つけました。

なぜ、SQLCMDが見つからないのですか?ちなみに、私はそうのようなバッチファイルでSQLCMDコマンドを呼び出しています:最後に

SQLCMD -S <> -E -I <> 
+0

私はあなたがserverfault –

答えて

1

、問題はプロセスが起動されたときに、環境変数のコピー」であるという事実にありますそれを「ロード」します。この環境変数の値がいつでも変更された場合、プロセスにロードされた「コピー」は更新されません。 SQLのインストーラがインストールされてしまったとき、私の場合は

は、それは、%PATH%変数にそのビンのパスを追加:

C:Binnの\

\の\ Program Files \ Microsoft SQL Serverの\ 100 \ツール

しかし、ブートストラップにロードされた%PATH%の値にはこのパスがありません。そのため、バッチファイルは "sqlcmd"と呼ばれるエラーレベル9009(Program Not Found)を返します。

これを修正するには、コンポーネントのインストールを開始する前に、%PATH%環境変数の値を何らかの形で「リフレッシュ」する必要があります。私はこのコードでこれをした:

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

     Environment.SetEnvironmentVariable(variable, latestMachineValue, EnvironmentVariableTarget.Process); 
    } 
関連する問題