Я пишу пользовательское действие, чтобы использовать предварительное условие, чтобы определить, работает ли 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;
}