2011-07-19 75 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); 
    } 
相关问题