我正在尝试使用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";