You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#启动命令行实用程序时如何正确向目标程序传递参数

问题根因

当前代码中传入PowerShell的参数用;作为命令分隔符,执行逻辑为顺序同步执行:

  • 首先切换到C:\inetpub\letsencrypt目录
  • 启动wacs.exe,并阻塞等待wacs.exe进程完全退出
  • wacs进程退出后,PowerShell才会执行后面的N语句,此时wacs进程已经销毁,自然无法收到该参数
    参数传递方向的判断是准确的:N从未进入win-acme的进程上下文,只是PowerShell进程中排在wacs启动命令后的一条无效语句。
推荐方案(稳定性最高)

不需要嵌套启动PowerShell,win-acme原生支持完整的非交互式命令行参数,直接启动wacs.exe并传入对应官方参数即可,不需要走交互菜单输入N,兼容性远高于模拟交互输入:

Process wacsProcess = Process.Start(new ProcessStartInfo
{
    FileName = @"C:\inetpub\letsencrypt\wacs.exe",
    // 此处填入业务需要的win-acme命令行参数,对应原本输入N要触发的操作
    // 所有支持的参数可参考win-acme自带的帮助说明,所有菜单操作都有对应的参数可以直接调用
    Arguments = @"",
    WorkingDirectory = @"C:\inetpub\letsencrypt",
    RedirectStandardOutput = true,
    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Hidden
});

wacsProcess.WaitForExit();
string output = wacsProcess.StandardOutput.ReadToEnd();
File.WriteAllText(@".\OutPutAfterFirstLaunch.txt", output);
备选方案(仅适用于必须走交互流程的场景)

如果因特殊限制必须模拟交互输入N,需要开启进程的标准输入重定向,直接向win-acme的输入流写入内容,不要把输入内容拼接在PowerShell命令序列中:

Process wacsProcess = Process.Start(new ProcessStartInfo
{
    FileName = @"C:\inetpub\letsencrypt\wacs.exe",
    WorkingDirectory = @"C:\inetpub\letsencrypt",
    RedirectStandardOutput = true,
    RedirectStandardInput = true, // 必须开启标准输入重定向才能写入交互内容
    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Hidden
});

// 向win-acme进程写入交互指令
wacsProcess.StandardInput.WriteLine("N");
// 写入完成后关闭输入流,避免进程一直等待输入导致卡死
wacsProcess.StandardInput.Close();

wacsProcess.WaitForExit();
string output = wacsProcess.StandardOutput.ReadToEnd();
File.WriteAllText(@".\OutPutAfterFirstLaunch.txt", output);

注意:模拟交互输入的方案兼容性很差,win-acme版本更新如果调整了菜单位置、顺序、提示逻辑,输入逻辑会直接失效,无特殊需求优先使用官方非交互式参数。

内容的提问来源于stack exchange,提问作者Chicharito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:22:17