当UseShellExecute = true

时间:2015-12-17 08:30:31

标签: c# process processstartinfo

我正在尝试使用以下代码将实例安装到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 ,但我不想使用注册表。还有其他更清洁的方法吗?

0 个答案:

没有答案