2

从右键菜单中使用我的 winform 应用程序打开文件时,我似乎无法获得正确的文件路径。我希望能够右键单击一个文本文件,运行我的程序(regedit.exe 中的 c:\MyApp %1)并在程序打开之前让文件路径出现在消息框中。现在我似乎得到的只是我实际程序的文件路径。这就是我到目前为止所拥有的。

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

任何帮助将不胜感激。我知道这可能是一个简单的解决方法,但我对此很陌生,可能会遗漏一些明显的东西。

谢谢你。

4

1 回答 1

2

不确定此信息是否有帮助,因为听起来您已经检查了所有这些,但我刚才运行了这个快速测试并且它有效:
首先,注册表设置应该如下所示。如果 %1 周围没有引号,并且它是一个长文件名,例如“New Text Document.txt”,则每个单词都将成为一个单独的参数,因此请务必在“%1”周围加上引号。 注册表设置

假设注册表设置正确,您现在应该在右键单击文本文件时看到新命令:
右键菜单

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

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

测试程序是否正常工作的一种方法是打开 DOS 提示符并像这样键入程序的路径并按回车键:

c:\MyApp.exe “应出现此行”

这会绕过注册表并直接测试程序. 如果这可行,那么您就知道问题不在于程序本身,而在于注册表设置。如果这不起作用,那么 C# 代码仍然存在一些问题。

于 2013-03-05T22:58:41.527 回答