2013-04-07 60 views
2

我有一个WinForms应用程序,它通过调用Environment.GetCommandLineArgs()来接受命令行参数并对其执行某些操作。将命令行参数传递给WinForm可在调试模式下工作,但不会在发布后工作

在调试模式下工作正常 - 我在Project Properties的Debug选项卡中输入参数,然后运行它(F5),应用程序正确地获取参数。

但是在我发布应用程序,并尝试从另一个WinForm应用程序使用此代码行调用它:

Process.Start("\\path\to\myApp\MyApp.application", "4") 

这是行不通的。显然这个论点并没有被传递给应用程序,我不知道为什么。我还尝试创建一个新流程,并在启动之前设置其ProcessStartInfo.Arguments,但它仍然无效。

任何人都可以帮助我吗?

UPDATE

在我看来,当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")时为什么没有将参数传递给本地副本?我应该怎么做才能将参数传递给本地副本?

+0

GetCommandLineArgs返回一个字符串数组,其中第一个元素是程序的名称,并从第二个索引开始。你确定你的应用程序中有正确的索引吗?你能告诉你如何处理这个论点? – Steve 2013-04-07 11:04:39

+0

尝试通过输出“Environment.CommandLine”的结果,沿着Steve建议的方向进行调试。你在这两种情况下看到了什么?它有什么不同,如果有的话? – 2013-04-07 11:06:45

+0

@Steve我知道。我首先检查'Environment.GetCommandLineArgs()。Length> 1'来查看是否有参数,然后使用'Environment.GetCommandLineArgs()(1)'来获取它。 – kodkod 2013-04-07 11:21:09

回答

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),但至少它解决了我的问题...

相关问题