【问题标题】:Is it possible to pass command-line arguments to an executable via an associated file?是否可以通过关联文件将命令行参数传递给可执行文件?
【发布时间】:2009-06-24 07:26:06
【问题描述】:

我有一个程序将命令行参数传递给可执行文件的关联文件(即关联文件扩展名)。可执行文件从不接收参数。但是,如果我直接启动可执行文件并将关联文件的路径和参数都传递给它,那么它会同时接收文件路径和参数。

  • 操作系统:Windows XP
  • 编程语言:C#

我正在使用以下方式启动关联文件:

System.Diagnostics.Process.Start(filepath, arguments)

提前感谢所有帮助。

-编辑

基本上,我有一个编程语言解释器,它需要接收由 C# 程序传递给它的命令行参数。

如果我使用 C# 程序启动代码文件,解释器将启动,但不会接收 C# 程序传递给代码文件的命令行参数。

所以一共有三个文件:

  1. 解释器
  2. 代码文件
  3. 程序试图像启动程序一样启动代码文件

另外,直接启动解释器也不是一个选项,因为它不是位于每台计算机上的相同文件路径。

我希望这更清楚,但我不能发布源代码做法律限制。

【问题讨论】:

  • 请您发布一些来源,因为我并没有完全“了解”您的需求。
  • 在我看来他在做 Process.Start("file.xls", "arg1 arg2");
  • 有效的是 Process.Start("excel.exe", "file.xls arg1 arg2");
  • (已更新以包含其工作示例)

标签: c# .net windows command-line


【解决方案1】:

您可以尝试 (未经测试) 更改文件关联(在高级窗格中)以在参数中包含 %2 %3 等(通常它只包含 %1 ) - 但是,这涉及到客户端的更改,并且(更重要的是)将参数传递给 document 的整个想法假定您拥有相同的查看器(即参数是合理的)。

IMO,更好的选择是显式启动 exe,将 doc(和其他其他文件)作为参数传递。

例子:

receiver exe(只显示收到的命令参数):

static class Program {
    [System.STAThread]
    static void Main(string[] args) {
        System.Windows.Forms.MessageBox.Show(string.Join("|", args));
    }
}

然后:创建一个“foo.flibble”文件,右键单击/打开并与我的接收器关联;进入文件关联,“flibble”,高级,“打开”,编辑,添加 %2 %3 %4

然后在一个单独的exe中:

Process.Start(@"c:\foo.flibble", "test of args");

其中显示:

c:\foo.flibble|test|of|args

所以这个已经现在通过文档将额外的参数传递给了 exe。但是客户端配置很多!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-26
    • 2013-11-21
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多