问题标签 [processstartinfo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3473 浏览

c# - 从 Process.Start 记录到文本文件

我正在使用 Process.Start(ProcessStartInfo) 启动一个进程。它当前会打开一个控制台窗口,并在那里显示进程的输出,直到进程完成,在这种情况下,控制台窗口会自动关闭。

该过程会输出大量文本,因此我不只是想将此输出重定向到字符串,就像我目前找到的示例一样。

如何让控制台输出的文本进入文本日志文件?

0 投票
2 回答
1983 浏览

process - System.Diagnostics.Process 不接受凭据

我正在尝试使用 Process 类执行批处理文件。此代码位于我使用 LogonUser() 和 WindowsIdentity.Impersonate() 模拟本地 PC 管理员帐户的较大部分代码的中间。

我试图在进程中运行批处理文件,而不在 ProcessStartInfo 中添加凭据,但是这样做会导致批处理文件静默失败 - 没有引发错误,并且从未返回批处理文件的预期输出(我正在阅读stderr 和 stdout 异步,fwiw)。

然后,我将凭据添加到 ProcessStartInfo,但现在如果我不先调用 WindowsImpersonationContext.Undo(),我会收到“拒绝访问”错误,如果我调用 .Undo,则会收到“登录失败:未知用户名或密码错误”错误() 在 Process.Start() 之前。我已经三次检查了多个帐户的用户名/密码/域是否正确。

如果我的代码没有 LogonUser() 或 WindowsIdentity.Impersonate() 调用(并且 ProcessStartInfo 中没有凭据),那么批处理文件的执行和捕获的批处理文件的输出没有问题。

我能够以本地管理员或任意本地用户帐户的身份从桌面成功运行批处理文件。我可以看到它的权限表明它应该可以从我尝试运行它的帐户中读取/可执行。这真的很困难。任何帮助表示赞赏。

0 投票
0 回答
442 浏览

c# - 从 C#/ASP.NET 中运行时,命令行程序永远不会完成

我一直在阅读如何从 C# ASP.NET 应用程序中执行 Win32 命令行程序,由于某种原因,下面的代码在执行期间永远不会完成,无限期地卡output = p.StandardOutput.ReadToEnd();网上。

该代码在从本地调试服务器执行时运行良好(在 Visual Studio 中按 F5),但是当通过浏览器通过完整 URL (myexample.com/testapp) 访问它时,调试器从未超出该output=...行。

.exe 是一个简单的 http 请求应用程序,不访问本地文件或任何东西,将结果输出到控制台。

起初我认为这可能是一个权限问题,因此出于调试目的将FetchIntranetPageSpecial.exe权限设置为“所有人,一切” - 通过 localhost 访问时仍然可以正常工作,但在远程访问时仍然挂起。

关于下一步我可以尝试什么的任何指示?

编辑:我还阅读了此页面Program doesn't terminate when using processes,但在这种情况下,调试器在此行进入无限期“等待”状态:

0 投票
2 回答
1051 浏览

c# - 如何让“RedirectStandardOutput”在 NUnit 中工作?

我正在为我们的 QA 组制定自动化策略,并且需要能够捕获脚本和 EXE 文件的输出。当我将此代码作为控制台应用程序运行时,我能够成功捕获 plink.exe 的输出:

执行此命令大约需要一分钟,我成功地将结果捕获到输出变量。

但是,当我将相同的代码编译为 DLL 并通过 NUnit 运行时,代码会立即完成并以 output == NULL 的值失败:

我已将问题范围缩小到一行string output = process.StandardOutput.ReadToEnd()。如果我注释掉这一行,执行时间大约是一分钟,并且操作在远程机器上成功执行(test.sh 在远程 Linux 机器上执行)。

我希望我遗漏了一些简单的东西——我不想找到不同的测试工具。

它看起来类似于此处的(未解决的)问题:为什么在使用控制台应用程序进行测试时,在 DLL 文件中启动的进程可以工作,但在被另一个 DLL 文件调用时却不行?

0 投票
1 回答
313 浏览

wpf - 串联和并联启动过程

我这里有问题......

我有一个 ProcessStartInfo 列表作为List<ProcessStartInfo>

我想在Seriesie中启动进程

如果我启动第一个进程,那么列表中的第二个进程应该仅在第一个进程(退出或中止)时启动...

我尝试它喜欢......

我正在startSeriesExecution使用自定义类进行多线程处理,所有进程同时执行....

还有一件事我观察到...

如果 1 进程已经在运行...可以说 IE 已经在运行,现在我执行startSeriesExecution()并在此启动一个已经运行的进程(IE)...然后执行整个 for 循环...即列表中的所有进程被执行...

现在不知道如何继续....

0 投票
2 回答
2262 浏览

c# - 在 C# 中使用 New Process(),如何将命令行文本复制到文本文件中?

我想使用参数 -a、-c 和 3400@takd 运行 lmutil.exe,然后将命令行提示符生成的所有内容放入文本文件中。我下面的内容不起作用。

如果我逐步完成该过程,我会收到诸如“抛出 System.InvalidOperationException 类型的异常”之类的错误

我想要的只是将命令行输出写入 Report.txt

0 投票
4 回答
2739 浏览

.net - How to start a console application and prevent it from closing at the end?

I'm starting a shell script (.cmd) from my .NET application. I'd like the console window to remain open after the script has completed so that I can check for any errors. I'm trying with cmd.exe /K:my.cmd, but for some reason that does not work (the script does not get executed). Even a simple "dir" command does not work. Any other ideas?

To demonstrate, this:

Gives me this:

Added clarification: My application (the one that starts the script) is a windows forms application. Executing the above code opens a new console window (as it should). I want THAT new console window to remain open. Also, I cannot modify the script. It's an automated build script and it HAS to terminate.

0 投票
1 回答
4557 浏览

c# - 具有多个参数的 Shutdown.exe 进程,无法正常工作

我想创建一个在给定时间后使用 shutdown.exe 关闭计算机的进程。

这是我的代码:

其中seconds是一个 int 局部变量,由用户决定。

当我运行我的代码时,什么也没有发生。但是当我手动进入 cmd 提示符并键入:
shutdown.exe -s -f -t 999
然后 Windows 会弹出一个窗口并告诉我系统将在 16 分钟内关闭。

我认为这是由于多个参数的原因,是我中止正在进行的系统关闭的方法有效(我从 cmd 提示符手动创建了 systemshutdown)。这几乎是一样的,除了startInfo.Argument

0 投票
4 回答
4715 浏览

c# - 如何在 C# 中使用带有 ProcessStartInfo 的“<”(输入重定向)?

我有以下内容:

我试试这个:

调用 Start() 后我的 dowork.exe 崩溃。

有什么建议么?

发布问题更新。

谢谢大家的意见。我使用 amit_g 的回答解决了这个问题。非常感谢 Phil 展示了可能是最好的方法(虽然我没有测试它,但我知道为什么它更好)。以下是我的完整解决方案。随意复制和修改您自己的问题。

1)创建一个控制台应用项目,添加这个类

2) 创建 1 个文件:C:\temp\input.txt

3)编辑input.txt,输入一个字母'w'并保存(没错,文件包含一个字母)。

4)新建一个类库项目。添加对 nunit 的引用(我使用的是 2.2 版)。

5) 创建一个 testfixture 类,它应该如下所示。注意:此测试夹具正在处理外部资源,因此您无法运行整个夹具,而是一次运行每个测试。你可以通过确保所有文件流都关闭来解决这个问题,但我不想写这个,你可以自己扩展它。

}

0 投票
5 回答
3673 浏览

c# - Process.Start 文件名使用 %temp%

由于某些奇怪的原因,此代码失败:

并且此代码成功:

我失踪有什么原因吗?

请注意,我只是复制了路径,我认为不需要其余代码,但无论如何我都会放它: