Программного обеспечения:
Мы безуспешно пытались установить именованный экземпляр SQL Server Express 2016 как часть проекта установки VS Installer.
Мы попытались вызвать InstallNamedInstance() следующим образом:
SQLEXPR_x64_ENU.exe с теми же аргументами командной строки из окна командной строки администратора: УспешноInstallNamedInstance() из консольного приложения и запустите консольное приложение из окна командной строки администратора: Успешно.Я заметил, что текущий пользователь при запуске msi - это NT AUTHORITY\SYSTEM. Всякий раз, когда он выходит из строя из проекта установщика, он выходит из строя с сообщением ниже:
The account that is running SQL Server Setup does not have one or all of the following rights: the right to back up files and directories, the right to manage auditing and the security log and the right to debug programs. To continue, use an account with both of these rights. For more information, see http://msdn.microsoft.com/en-us/library/ms813696.aspx, http://msdn.microsoft.com/en-us/library/ms813959.aspx and http://msdn.microsoft.com/en-us/library/ms813847.aspx.
Это ограничение проекта установщика или мне что-то не хватает? Удастся ли нам больше с AdvancedInstaller?
Обратите внимание, что предварительный компонент проекта установщика не работает для нас, потому что нам нужно создать именованный экземпляр SQL Server Express, и мы не можем увидеть, как мы можем передать аргументы командной строки в предварительный компонент.
private void InstallNamedInstance()
{
// NOTE: Change below instance name to get unique instances (or uninstall previous instance)
var InstanceName = "TFPICDATABASES2";
var proc = new Process();
// NOTE:
// 1. Download "SQLServer2016-SSEI-Expr.exe" web installer from https://www.microsoft.com/en-us/download/details.aspx?id=54284
// 2. Run the web installer and choose 3rd option "Download Media". This will give "SQLEXPR_x64_ENU.exe"
proc.StartInfo.FileName = @"c:\temp\sql\SQLEXPR_x64_ENU.exe ";
proc.StartInfo.Arguments = " /Action=Install";
proc.StartInfo.Arguments += $" /INSTANCEID = {InstanceName}";
proc.StartInfo.Arguments += $" /InstanceName = {InstanceName}";
proc.StartInfo.Arguments += " /ROLE=AllFeatures_WithDefaults";
proc.StartInfo.Arguments += " /QS";
proc.StartInfo.Arguments += " /INDICATEPROGRESS=True";
proc.StartInfo.Arguments += " /IAcceptSQLServerLicenseTerms=True";
proc.StartInfo.WorkingDirectory = @"c:\temp\sql";
WriteLog($"FielName: {proc.StartInfo.FileName}; Arguments: {proc.StartInfo.Arguments}; WorkingDir: {proc.StartInfo.WorkingDirectory}");
proc.StartInfo.UseShellExecute = false;
proc.OutputDataReceived += (s, e) => WriteLog($"Info: {e.Data}");
proc.ErrorDataReceived += (s, e) => WriteLog($"Error: {e.Data}");
var ok = proc.Start();
// NOTE: Log files are in C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log
// Summary.txt gives log of latest installer run. It also creates one folder for each installer attempt
// and gathers more detailed logs in those folders.
proc.WaitForExit();
WriteLog($"{proc.StartInfo.FileName} exited with {proc.ExitCode}");
if (proc.ExitCode != 0)
{
throw new Exception($"SQL Server Express installation failed. Check log file for more details");
}
}





Я подозреваю, что ваше настраиваемое действие не выполняется под учетной записью SYSTEM из-за ошибок, упомянутых в этих статьях:
В расширенном установщике настраиваемое действие, устанавливающее сервер SQL, не выполняется под системной учетной записью, оно выполняется под учетной записью, с которой началась установка (который должен иметь учетные данные администратора). Настраиваемое действие (специальная программа запуска exe в комплекте с Advanced Installer) настроено на требование повышения прав администратора (который я подозреваю, вы не можете настроить в VS), поэтому процесс установки для сервера SQL выполняется с повышенными правами с использованием обычной учетной записи пользователя с компьютера, а не NT SYSTEM.
Будет ли пользовательское действие удаления в AdvancedInstaller также запускаться под учетной записью пользователя, которая инициирует удаление (конечно, я понимаю, что потребуются права администратора). Кстати, ваш ответ нам очень помогает. Спасибо.
Для меня это вопрос dba.stackexchange.com.