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及以后开始。
我正在尝试从一个进程调用以启动另一个进程,在 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及以后开始。