Tag: processstartinfo

在已运行的控制台应用程序内运行交互式进程,无需打开新窗口

我意识到这看起来像很多其他问题,但我看了几个小时都没看过,我从未找到我需要的真正答案,所以请听我说: 这适用于.NET C#控制台应用程序。 在其中,我想使用Process.Start调用Windows可执行文件,但是在运行时没有打开新的控制台窗口 。 我还希望可执行文件能够输出到控制台并正常响应用户输入。 你怎么做到这一点? 设置ProcessStartInfo.CreateNoWindow或ProcessStartInfo.WindowStyle ? 尝试使输入/输出重定向工作数小时? 编辑: smh ……这与那里的“可能的重复”不同,因为: 这适用于想要在自身内无缝运行Windows命令的控制台应用程序,就好像该命令是控制台应用程序本身的一部分一样。 例如:创建一个新的C#控制台应用程序并使其运行Windows copy命令。 另外,我需要用户能够与正在运行的命令交互 (例如,如果copy询问是否覆盖我希望用户回答),那么隐藏窗口就像这样 ,或者这个可能的答案是禁止的。 我想强调单个 UseShellExecute属性如何解决问题,在这样的答案中没有误导性的绒毛(例如,关于I / O重定向),或者这再次让我浪费时间。

Process.Start权限问题

我正在尝试使用Process.Start从C#运行外部问题,但遇到了权限问题。 当我正常打开命令提示符(而不是管理员)并运行我的命令时,它们工作正常,但是当我通过Process.Start打开命令提示符时,我在目录上收到写入错误。 (“我不能写文件test.log”) 如果我通过Process.Start以管理员身份运行它可以正常工作,但我获得了权限弹出窗口。 有没有人有任何想法可以帮我解决这个问题? 谢谢! 这是我正在使用的代码: Process proc = new Process(); proc.StartInfo.FileName = @”cmd.exe”; proc.StartInfo.Arguments = @”/k latex C:\Users\Shane\Documents\test.tex”; proc.Start(); proc.WaitForExit();

使用.NET Process.Start运行时挂起进程 – 出了什么问题?

我在svn.exe周围写了一个快速而又脏的包装器来检索一些内容并用它做一些事情,但对于某些输入它偶尔会重复挂起并且无法完成。 例如,一个调用是svn列表: svn list “http://myserver:84/svn/Documents/Instruments/” –xml –no-auth-cache –username myuser –password mypassword 当我从命令shell执行此操作时,此命令行运行正常,但它在我的应用程序中挂起。 我运行它的c#代码是: string cmd = “svn.exe”; string arguments = “list \”http://myserver:84/svn/Documents/Instruments/\” –xml –no-auth-cache –username myuser –password mypassword”; int ms = 5000; ProcessStartInfo psi = new ProcessStartInfo(cmd); psi.Arguments = arguments; psi.RedirectStandardOutput = true; psi.WindowStyle = ProcessWindowStyle.Normal; psi.UseShellExecute = false; Process proc = Process.Start(psi); StreamReader output […]

如何使用ProcessStartInfo运行批处理文件?

但它不起作用 – 意味着java代码没有执行。 虽然批处理文件在Windows资源管理器中单击或在命令行中运行时运行正常。 由于批处理文件是单个DOS命令时这可以正常工作,我认为这与Java代码运行需要大约20分钟这一事实有关。 我正在使用以下代码 var si = new ProcessStartInfo(); si.CreateNoWindow = true; si.FileName = batchFileName; si.UseShellExecute = false; Process.Start(si); 我究竟做错了什么?

从控制台应用程序发送输入/获取输出(C#/ WinForms)

我有一个包含3个控件的表单: 用户输入命令以发送到控制台应用程序的文本框, 用于确认要发送的命令的按钮 一个只读文本框,用于显示应用程序的输出。 我想要的是让用户在第一个文本框中输入命令,按下按钮以通过第二个文本框输入和接收反馈。 我知道如何使用ProcessStartInfo.RedirectStandardOutput但是,当我使用StandardOutput.ReadToEnd()时,应用程序挂起。 我看了一下异步的Process.BeginOutputReadLine()但是,即使我的应用程序没有挂起,不知何故我在文本框中没有得到任何响应,它什么也没做。 这是我的代码: public partial class MainForm : Form { private void MainForm_Load(object sender, EventArgs e) { InitializeInterpreter(); } private void InitializeInterpreter() { InterProc.StartInfo.UseShellExecute = false; InterProc.StartInfo.FileName = “app.exe”; InterProc.StartInfo.RedirectStandardInput = true; InterProc.StartInfo.RedirectStandardOutput = true; InterProc.StartInfo.RedirectStandardError = true; InterProc.StartInfo.CreateNoWindow = true; InterProc.OutputDataReceived += new DataReceivedEventHandler(InterProcOutputHandler); InterProc.Start(); } private static void […]

提升权限不适用于UseShellExecute = false

我想启动一个子进程(实际上是相同的控制台应用程序),具有提升的权限但隐藏窗口。 我做下一个: var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location) { UseShellExecute = true, // ! Verb = “runas”, }; var process = new Process { StartInfo = info }; process.Start(); 这工作: var identity = new WindowsPrincipal(WindowsIdentity.GetCurrent()); identity.IsInRole(WindowsBuiltInRole.Administrator); // returns true 但UseShellExecute = true会创建一个新窗口,我也无法重定向输出。 所以我下次做的时候: var info = new ProcessStartInfo(Assembly.GetEntryAssembly().Location) { RedirectStandardError = true, RedirectStandardOutput = true, UseShellExecute […]

以编程方式运行msbuild

我试图以编程方式执行msbuild并且无法执行以下命令: string command = string.Format(@”C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe “”{0}\{1}.csproj”””, _args.ProjectPath, _args.ProjectName); 字符串呈现为: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe “C:\…\TestResults\Foo 2011-08-31 16_29_40\Out\Foo\solutionName\projectName\projectName.csproj” 然后我使用新的ProcessStartInfo(命令)。 问题似乎是Foo和2011之间的空间。我得到以下输出: MSBUILD : error MSB1008: Only one project can be specified. Switch: 16_29_40\Out\Foo\solutionName\projectName\projectName.csproj 如何将项目文件传递给msbuild?

从非管理员应用程序以管理员身份运行流程

从未以管理员身份运行的应用程序,我有以下代码: ProcessStartInfo proc = new ProcessStartInfo(); proc.WindowStyle = ProcessWindowStyle.Normal; proc.FileName = myExePath; proc.CreateNoWindow = false; proc.UseShellExecute = false; proc.Verb = “runas”; 当我调用Process.Start(proc)时,我没有弹出请求以管理员身份运行的权限,并且exe不以管理员身份运行。 我尝试将app.manifest添加到myExePath中找到的可执行文件,并将requestedExecutionLevel更新为 使用更新的app.manifest,在Process.Start(proc)调用中,我得到一个exception,“请求的操作需要提升。” 为什么.Verb操作没有设置管理员权限? 我正在测试Windows Server 2008 R2 Standard。