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

C#调用Process.Start传string[]报错无法转换为string如何解决

问题原因分析

你出现类型转换错误的核心原因是 .NET Framework 4.7.2 版本的 Process 类没有提供接受 string[] 或 IEnumerable<string> 类型入参的 Start 重载,该重载是在 .NET Core 3.0 及后续的 .NET 5+ 版本才新增的,你使用的 .NET Framework 版本不支持该语法,所以编译器会尝试将你的 string[] 参数匹配到现有的 Start(string) 重载,自然就抛出类型不匹配的错误。
另外你当前调用的是 Process 的实例方法 Start(),该实例方法本身是无参的,参数本身就应该提前配置到 StartInfo 属性中,而非传入 Start 方法。

正确实现方案

你不需要用SQLite中转参数,直接将参数拼接为符合命令行规则的字符串,赋值给 StartInfo.Arguments 即可,注意要对包含空格、特殊字符的参数做转义处理,避免参数被错误拆分。
修正后的代码示例:

class Program_Console
{
    public static void Main(string[] tsArgs)
    {
        tsArgs = new string[] { "Test Pass0", "TP1", "TP2" };
        Process p = new Process();
        try
        {
            p.StartInfo.FileName = BURS_Dir;
            // 拼接参数,带空格的参数自动包裹双引号,同时转义参数内的双引号
            p.StartInfo.Arguments = string.Join(" ", 
                tsArgs.Select(arg => $"\"{arg.Replace("\"", "\\\"")}\""));
            // 实例方法Start无参,参数由StartInfo提供
            p.Start();
        }
        catch (Exception ex)
        {
            // 异常处理逻辑
        }
    }
}

public class Program_UI
{
    // 注意:程序入口点必须是静态方法,你原有代码的实例方法无法作为入口
    [STAThread]
    static void Main(string[] tsArgs)
    {
        // 此处拿到的tsArgs就是控制台程序传入的参数数组,无需额外处理
        // UI逻辑
    }
}
额外注意点
  • 你原有UI程序的Main方法写为实例方法,不符合.NET程序入口点的要求,必须修改为static静态方法,否则UI程序无法正常接收传入的参数
  • 如果参数中包含中文、特殊符号,可额外配置 p.StartInfo.StandardOutputEncoding = Encoding.UTF8 等编码规则避免乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:39:02