从上下文菜单打开winform应用程序时获取文件路径。

问题描述:

当我用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

不知道这个信息会有所帮助,因为它听起来像你已经检查了这一切,但我刚才跑这个快速测试和它的工作原理:
首先,注册表设置应该是这样的。如果周围没有引号,并且它是一个长文件名,例如“New Text Document.txt”,则每个单词都将成为一个单独的参数,因此请确保将引号放在“%1”的周围。 Registry settings

假设注册表设置正确,你现在应该看到新的命令,当你在一个文本文件,单击鼠标右键:
Right-click menu

当程序运行时,数组中的第一项,这是args [0],将成为EXE的路径。第二项是args [1],应该是文件的名称。

如果添加行
MessageBox.Show(参数[1])
你应该看到的全部文件的名称,当您通过右键单击运行。如果你得到一个错误,说“索引超出了数组的范围”,那么它肯定没有得到论证。

一种方式来测试该程序正常工作是打开一个DOS提示符,然后键入路径,像这样的程序,并按下回车键:

C:\ MyApp.exe的“此行应该出现”

这绕过注册表并直接测试程序。如果这样做,那么你知道这个问题不是与程序本身,而是与注册表设置。如果这不起作用,那么C#代码仍然存在一些问题。