我正在尝试使用以下代码将实例安装到SQL:
Process p = new Process();
p.StartInfo = new ProcessStartInfo(@"D:\Softwares\SQL Server 2014\SQLEXPRADV_x64_ENU\SETUP",
@"/q /ACTION=Install /IAcceptSQLServerLicenseTerms=True /FEATURES=SQL /INSTANCENAME=PearlTrial /SQLSVCSTARTUPTYPE=Automatic /SQLSVCACCOUNT=""NT AUTHORITY\NETWORK SERVICE"" /SQLSYSADMINACCOUNTS=""BUILTIN\Administrators"" /AGTSVCACCOUNT=""NT AUTHORITY\Network Service"" /ADDCURRENTUSERASSQLADMIN=true /SECURITYMODE=SQL /SAPWD=""Password@123""");
p.StartInfo.UseShellExecute = true;
p.StartInfo.Verb = "runas";
p.Start();
p.WaitForExit();
p.Close();
现在安装程序运行成功,但由于需要重新启动系统而发生错误。现在我想提示用户是否需要重新启动,为此我需要从Process窗口读取输出。为此,我可以这样做:
p.StartInfo.RedirectStandardOutput = true;
using (StreamReader sr = p.StandardOutput)
{
if (sr.BaseStream.CanRead)
{ var d = sr.ReadToEnd(); }
}
但它不起作用,因为当UseShellExecute为true时,它不会创建进程,因此无法读取输出,如果我执行以下操作
p.StartInfo.UseShellExecute = false;
我收到了错误:
请求的操作需要提升
如何从流程中获取响应或如何检查是否需要重新启动系统?
我知道有一种方法可以在注册表中清除它
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager
并清除 PendingFileRenameOperations ,但我不想使用注册表。还有其他更清洁的方法吗?