将命令行参数传递给WinForm在调试模式下工作,但在发布后不工作

时间:2013-04-07 09:37:24

标签: vb.net winforms command-line-arguments process.start

我有一个WinForms应用程序,它通过调用Environment.GetCommandLineArgs()接受命令行参数并对其执行某些操作。

它在调试模式下工作正常 - 我在Project Properties的Debug选项卡中输入参数,然后运行它(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\MyA‌​pp.exe。如果我改为运行Process.Start("C:\users\etc", "4") - ,则可以

现在我的问题是 - 运行Process.Start("\\path\to\etc", "4")时为什么不将参数传递给程序的本地副本?我应该怎么做才能将参数传递给本地副本?

1 个答案:

答案 0 :(得分:0)

好的,正如我在问题的更新中所写,问题出在链接中。据推测,.application文件在我的机器上运行了本地.exe文件,但由于某种原因没有将参数传递给它。我必须直接打开本地.exe文件。

为了解决这个问题,我在这些行中添加了代码(为简洁省略了验证/异常处理逻辑):

Dim path As String = Environment.GetEnvironmentVariable("LOCALAPPDATA") & "\apps\2.0"
Dim files() As String = Directory.GetFiles(path, "MyApp.exe", IO.SearchOption.AllDirectories)
Process.Start(files(0), "4")

不是最佳解决方案(因为它假定本地.exe文件位于%LOCALAPPDATA%\apps\2.0的某个子文件夹中),但至少它解决了我的问题......