C# ProcessStartInfo:第二个进程没有收到任何参数

C# ProcessStartInfo: Second process receives no arguments

我正在尝试从一个进程调用以启动另一个进程,在 ProcessStartInfo 中提供起始参数作为单独的参数。起始调用使用 Windows 中注册的 URL 来查找第二个程序,进入 FileName。然后我将包含 4 个参数的字符串添加到 Arguments。据我了解,字符串中的空格表示参数的分隔。

程序 1

//Create starting information
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo() {
    FileName = "urlHandle:",
    Arguments = "/argA valueA /argB valueB"
};

//Start second program
System.Diagnostics.Process.Start(startInfo);

节目 2

//Print received arguments to a file
Environment.GetCommandLineArgs().ToList().ForEach(a => writer.WriteLine(a + ",\t"));

第二个程序按预期启动(意味着 URL 正在运行),但输出不完整。

[path to .exe of second program],

urlHandle:,

它包含程序的路径,设置为 FileName 的字符串,但是 Arguments 中的所有内容都丢失了。

有人知道为什么争论消失了吗?

注 1: 如果我将参数添加到 FileName,我将把它们作为一个字符串接收。为了在第二个程序中触发我想要的行为,我必须为其提供多个参数而不是一个。我知道这可以从终端手动测试。

注意 2: 我正在使用 .Net Framework,因此尝试 ArgumentList 来自 .Net Core 不是一个选项。

经过更多测试,我发现了问题所在。错误不在于我如何设置和使用 ProcessStartInfo,而是在于我使用的是自定义 URL 协议。

在 Windows 注册表中,定义了可以通过 URL 调用 ("C:\[path to my .exe]" "%1") 发送的参数数量。第一个参数是 Filename,并且是唯一通过协议发送的参数。为了发送更多,需要添加"%2""%3"

注意:路径本身成为接收程序中的参数0,而实际发送的参数从参数1及以后开始。