如何使用c#/ASP.NET中的Impersonaion.RunProcess不等待退出

本文关键字:RunProcess Impersonaion 等待 退出 中的 NET 何使用 ASP | 更新日期: 2023-09-27 18:20:49

我想知道的是,在使用模拟时,是否有一种方法可以不等待进程。没有过载,所以我不知道该怎么做。

// always waits for exit to continue
Impersonation.RunProcess(someProcessPath);

我之所以要这样做,是因为我有一个处理大文件的长时间执行的应用程序,但我希望在将它们引导到状态页之前,向客户端提供进程已开始的成功响应。我无法使用正常进程运行该进程。Start(),因为IUSER需要模拟提升的用户帐户。

我甚至尝试过使用流程。在Impersonation.Login()之后的StartInfo并提供un/pass,但我认为"已登录"状态只是静态Impersonation类的一部分。

if (Impersonation.Logon(LoginCredentials.UserName, LoginCredentials.Password))
{
                // this fails with an invalid privileges exit code
                process.StartInfo.FileName = path;
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.UserName = "Administrator";                    
                SecureString secString  = new SecureString();
                foreach( char c in "mypassword" )
                    secString.AppendChar( c );
                process.StartInfo.Password = secString;
                process.StartInfo.Verb = "runas";
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                process.Start();
 }

我发现了无数关于如何在继续使用process.WWaitForExit()之前等待正常调用的进程结束的帖子。我还通过在控制台应用程序中单独使用process.start()成功地忽略了退出(已经过身份验证)。

如何使用c#/ASP.NET中的Impersonaion.RunProcess不等待退出

您可以将其分叉到另一个线程:

// using ThreadPool for long running tasks is discouraged so create a new thread
var t = new Thread(() => Impersonation.RunProcess(someProcessPath)) { IsBackground = true };
t.Start();

您可以在线程方法内部设置一些标志,以指示何时调用它以及何时完成。

Impersonation.RunProcess("/path/to/cmd.exe /C start "+someProcessPath);

cmd.exe结束时,也就是在启动someProcessPath

之后,将返回此消息