【发布时间】:2021-09-02 14:26:26
【问题描述】:
我正在启动一个外部可执行文件(作为项目解决方案的一部分提供)以获取控制台输出,以便事后分析结果。一切正常,当我使用控制台应用程序使用 Process.Start 启动进程时,使用以下代码:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = $"{location}find.exe"; // External EXE!
proc.StartInfo.Arguments = $"\"{host}\" -printf \"%M %p\n\"";
// Set credentials
proc.StartInfo.Domain = domain;
proc.StartInfo.UserName = username;
System.Security.SecureString ssPwd = new System.Security.SecureString();
for (int x = 0; x < password.Length; x++)
{
ssPwd.AppendChar(password[x]);
}
proc.StartInfo.Password = ssPwd;
// StartInfo setup
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
proc.ErrorDataReceived += new DataReceivedEventHandler(OutputErrorHandler);
proc.Start(); // <--- System.ComponentModel.Win32Exception occures on calling Start()
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.WaitForExit();
将确切的代码添加到我的 WPF 应用程序后,它总是抛出一个异常,说“访问被拒绝”。同样,在使用管理员权限运行 WPF 应用程序时,也会发生同样的错误。
但是它在 WPF 中工作,如果我取出凭据,但它在本地用户下运行,应该避免什么。相反,应该使用给定的凭据来启动该过程。
WPF 应用程序有什么不同?我错过了什么吗?
任何提示表示赞赏...
注意编辑:
我在 github 上添加了一个 repo,它也按预期工作。 包含的来自 codeproject 的模拟工作不正常(在我的情况下),但 Process.Start with credentials 现在在 WPF 中工作正常......
需要深入挖掘我当前的项目...
【问题讨论】:
-
哪行代码抛出异常?
-
@Robert Harvey:通过调用 Start() 函数(代码示例中添加了注释)
-
我在这里也找到了一篇好文章:weblogs.asp.net/hernandl/startprocessasuser
-
您是管理员吗?除非您通过右键单击快捷方式启动 VS 并选择以管理员身份运行,否则 VS 不会启用管理员。
-
VS 总是以管理员启动(在我的情况下,因为我也在使用本地 IIS 进行开发)。 CMD和WPF都是在同一个项目中运行的,所以情况是一样的。此外,对于 Admin,WPF 会出现“访问被拒绝”消息。
标签: c# .net process processstartinfo