2011-07-19 73 views
0

我有一個引導程序是鏈安裝以下幾部分組成:SQL Server 2008 R2 Express安裝後是否需要重新啓動計算機?

的SQL Server 2008 R2 - >數據庫初始化批處理文件 - >產品MSI

的SQL服務器正在安裝悄悄使用Configuration.INI文件。那裏沒問題。

問題出在DB初始化批處理文件。批處理文件調用一個兩個OSQL命令,爲它提供一個.SQL文件(通過-i標誌),用於數據庫刪除和數據庫創建。

當我在調用OSQL之後立即回顯%ERRORLEVEL%時,錯誤級別爲。我已經爲Google做過了,但沒有得到有意義的結果。

我正在重新啓動SQL 2008安裝後的服務(MSSQL $ SQLExpress)。

這是奇怪的部分。如果我在運行引導程序之前運行SQL Server 2008安裝之前,它工作正常。我沒有做任何特別的事情,我只是安裝它(不重新啓動等)。

此外,如果SQL 2008已經安裝在機器中,引導程序將跳過SQL 2008的安裝並直接進入數據庫初始化。在這種情況下,數據庫將被成功初始化。

有關如何進行的任何建議?

編輯

尋找到這進一步之後,我發現這一點:

命令解釋器(命令提示符)設置ERRORLEVEL 9009當 一批試圖執行未發現一個程序。

那麼,爲什麼找不到SQLCMD?順便說一句,我在批處理文件調用SQLCMD命令,像這樣:

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

我想你會有更好的運氣在serverfault –

回答

1

最後,問題就在於,當一個進程產生,環境變量的副本「加載「它。如果在任何時候這個環境變量的值發生了變化,那麼加載到進程的「副本」將不會被更新。

在我的情況下,得到了安裝SQL安裝程序時,它附加了bin路徑到%PATH%變量:

C:\ Program Files文件\ Microsoft SQL Server的\ 100個\ TOOLS \ BINN \

但是,引導程序中加載的%PATH%的值沒有此路徑,這就是批處理文件調用「sqlcmd」時返回錯誤級別9009(程序未找到)的原因。

爲了解決這個問題,我需要在每個組件安裝開始之前以某種方式「刷新」%PATH%環境變量的值。我這樣做了這個代碼:

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

     Environment.SetEnvironmentVariable(variable, latestMachineValue, EnvironmentVariableTarget.Process); 
    } 
相關問題