在命令提示符下工作的命令在 C# 中不起作用



我正在尝试使用C#命名空间System.Diagnostics运行一个命令。

我使用这些命令来安装SQL Server和SQL Server Management Studio。

对于SQL Server,我从以下位置下载了安装程序:https://www.microsoft.com/en-us/download/confirmation.aspx?id=55994并安装了基本版本。

之后我想使用这个:

try
{
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "C:\SQLServer2017Media\Express_ENU\SETUP.exe /Q /IACCEPTSQLSERVERLICENSETERMS /ACTION=install /FEATURES=SQL,AS,IS,Tools /INSTANCENAME=MSSQLSERVER";
p.Start();
string output = p.StandardOutput.ReadToEnd();
}
catch (Exception e)
{
}

此命令适用于cmd.exe:

C:SQLServer2017MediaExpress_ENUsetup.exe /Q /IACCEPTSQLSERVERLICENSETERMS 
/ACTION=install /FEATURES=SQL,AS,IS,Tools /INSTANCENAME=MSSQLSERVER

我从下载了SQL Server Management Studio的安装程序https://download.microsoft.com/download/D/D/4/DD495084-ADA7-4827-ADD3-FC566EC05B90/SSMS-Setup-ENU.exe

并运行:

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.Arguments = "start "" " + DownloadsFolderPath + "\SSMS-Setup-ENU.exe /install /Passive SSMSInstallRoot=C:\Program Files\Microsoft SQL Server /norestart";
p.Start();
string output = p.StandardOutput.ReadToEnd();

通过cmd:

start "" C:Users...DownloadsSSMS-Setup-ENU.exe /install /Passive 
SSMSInstallRoot=C:Program FilesMicrosoft SQL Server /norestart

中的命令在cmd.exe中工作。在Visual Studio中则不然。我以管理员权限打开Visual Studio。在两种情况下,它从未从返回

output = p.StandardOutput.ReadToEnd();

SQL Server安装文档:https://learn.microsoft.com/en-us/sql/database-engine/install-windows/install-sql-server-from-the-command-prompt?view=sql-server-ver15#功能

SQL Server Management Studio安装:https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?redirectedfrom=MSDN&view=sql-server-ver15

我认为这是因为您在参数中没有使用"/C",而是使用了"start"。

它与CMD行有点不同

试着这样做:

p.StartInfo.Arguments = "/C "" " + DownloadsFolderPath + "\SSMS-Setup-ENU.exe /install /Passive SSMSInstallRoot=C:\Program Files\Microsoft SQL Server /norestart";