2013-03-05 98 views
1

當我用winform應用程序從右鍵菜單打開文件時,我似乎無法獲得正確的文件路徑。我希望能夠右鍵單擊文本文件,運行我的程序(在regedit.exe中爲c:\ MyApp%1),並在打開程序之前在文件路徑中顯示文件路徑。現在我所看到的只是我實際程序的文件路徑。這是我迄今爲止所擁有的。從上下文菜單打開winform應用程序時獲取文件路徑。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     string[] args = Environment.GetCommandLineArgs(); 
     foreach (string arg in args) 
     { 
      MessageBox.Show(arg); 
     } 
     InitializeComponent(); 
    } 

任何幫助將不勝感激。我明白這可能是一個簡單的解決方法,但我很新,可能會漏掉一些明顯的東西。

謝謝。

+1

您的程序名稱只有1個msgbox嗎?你能檢查它是否不是你的註冊表輸入錯誤?例如,通過從控制檯運行任何參數來運行應用程序:app.exe test? – 2013-03-05 18:08:52

+0

是的,一個msgbox與程序路徑一起出現。我把它放在HKEY_CLASSES_ROOT - > txtfile - > shell - >「MyCommandName」 - > command - > c:\ MyApp%1下。似乎工作正常。 – Jhogg 2013-03-05 18:28:47

+1

你應該有如下命令的默認值:「C:\ MyApp.exe」「%1」。不要忽略「,你的程序應該一個接一個地打印2個消息框。程序名稱,當你確定時 - 文件名稱 – 2013-03-05 18:42:23

回答

2

不知道這個信息會有所幫助,因爲它聽起來像你已經檢查了這一切,但我剛纔跑這個快速測試和它的工作原理:
首先,註冊表設置應該是這樣的。如果周圍沒有引號,並且它是一個長文件名,例如「New Text Document.txt」,則每個單詞都將成爲一個單獨的參數,因此請確保將引號放在「%1」的周圍。 Registry settings

假設註冊表設置正確,你現在應該看到新的命令,當你在一個文本文件,單擊鼠標右鍵:
Right-click menu

當程序運行時,數組中的第一項,這是args [0],將成爲EXE的路徑。第二項是args [1],應該是文件的名稱。

如果添加行
MessageBox.Show(參數[1])
你應該看到的全部文件的名稱,當您通過右鍵單擊運行。如果你得到一個錯誤,說「索引超出了數組的範圍」,那麼它肯定沒有得到論證。

一種方式來測試該程序正常工作是打開一個DOS提示符,然後鍵入路徑,像這樣的程序,並按下回車鍵:

C:\ MyApp.exe的「此行應該出現」

這繞過註冊表並直接測試程序。如果這樣做,那麼你知道這個問題不是與程序本身,而是與註冊表設置。如果這不起作用,那麼C#代碼仍然存在一些問題。

相關問題