我正在编写一个自定义操作来使用先决条件来检测 SQLCMD 是否正在机器上工作。我可以使用下面的代码检查机器上是否有 SQLCMD。
在安装程序中,我们使用 CMDPrompt 来处理 SQLCMD,但如果机器在环境变量中没有 SQLCMD 路径,它将无法工作。但我也想知道为什么 CMDprompt 给出'sqlcmd' is not recognized as an internal or external command error.
[CustomAction]
public static ActionResult FindSqlCMD(Session session)
{
DebugMsg(session, "Start FindSqlCMD");
string[] sqlVersions = session["SQLVERSIONS"].Split(';');
List<RegistryKey> sqlKeys = new List<RegistryKey>();
var sqlDacPaths = new string[] { "C:\\Program Files (x86)\\Microsoft SQL Server\\{0}\\DAC\\bin", "C:\\Program Files\\Microsoft SQL Server\\{0}\\DAC\\bin" };
var sqlPackageName = "SqlPackage.exe";
foreach (string SqlVersion in sqlVersions)
{
foreach (var sqlDacPath in sqlDacPaths)
{
var path = string.Format(sqlDacPath, SqlVersion);
if (Directory.Exists(path))
{
var sqlPackagePath = Path.Combine(path, sqlPackageName);
if (File.Exists(sqlPackagePath))
{
session["SQLBINDIR"] = sqlPackagePath;
return ActionResult.Success;
}
}
}
}
DebugMsg(session, string.Format("Didn't find any SQL DAC SQLPackage"));
session.Log("End FindSqlCMD");
return ActionResult.Success;
}
慕沐林林
相关分类