2013-04-07 31 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),但至少它解決了我的問題...

相關問題