【发布时间】:2013-04-07 09:37:23
【问题描述】:
我有一个 WinForms 应用程序,它通过调用 Environment.GetCommandLineArgs() 接受命令行参数并对其进行处理。
它在调试模式下工作正常 - 我在项目属性的调试选项卡中输入参数,然后运行它 (F5) 并且应用程序正确获取参数。
但在我发布应用程序并尝试使用此代码行从另一个 Winform 应用程序调用它之后:
Process.Start("\\path\to\myApp\MyApp.application", "4")
它不起作用。显然,由于某种原因,该参数没有传递给应用程序,我不知道为什么。我还尝试创建一个新进程并在启动它之前设置它的ProcessStartInfo.Arguments,但它仍然不起作用。
谁能帮帮我?
更新
在我看来,当调用Process.Start("\\path\to\etc", "4") 时,实际运行的是我机器上程序的本地副本,位于C:\users\myUserName\AppData\Local\App\2.0\long-string-of-digits-and-letters\MyApp.exe。如果我改为运行 Process.Start("C:\users\etc", "4") - 它可以工作。
现在我的问题是 - 为什么在运行 Process.Start("\\path\to\etc", "4") 时没有将参数传递给程序的本地副本?我应该怎么做才能将参数传递给本地副本?
【问题讨论】:
-
GetCommandLineArgs 返回一个字符串数组,其中第一个元素是程序的名称,从第二个索引开始是参数。您确定在应用程序中获得了正确的索引吗?你能说明你是如何处理这个论点的吗?
-
通过输出
Environment.CommandLine的结果,尝试按照史蒂夫建议的方式进行调试。你在这两种情况下看到了什么?如果有的话,它有什么不同? -
@Steve 我知道。我先检查
Environment.GetCommandLineArgs().Length > 1看是否有参数,然后使用Environment.GetCommandLineArgs()(1)得到它。 -
我注意到 0-index 参数(程序路径)似乎类似于
C:\users\myUserName\AppData\Local\App\2.0\long-string-of-digits-and-letters\MyApp.exe,这与Process.Start()中的\\path\to\myApp\MyApp.application不同。我不知道这对我的问题是否重要和/或相关。
标签: vb.net winforms command-line-arguments process.start