【问题标题】:C# Open File With Associated Application passing argumentsC# 打开带有关联应用程序传递参数的文件
【发布时间】:2011-06-28 09:10:35
【问题描述】:


我正在尝试启动为指定附加参数的扩展注册的默认应用程序:

 ProcessStartInfo p = new ProcessStartInfo();
 p.Arguments = "myargument";
 p.FileName = "file.ext";
 Process.Start(p);

应用程序开始正确打开指定的文件。 问题是它只得到一个参数(文件名),完全忽略了额外的“参数”。
有可能做我想做的事吗? 难道我做错了什么?

提前感谢您的帮助,
保罗

【问题讨论】:

    标签: c# arguments processstartinfo


    【解决方案1】:

    我认为更简单的方法是使用 cmd 命令

     void LaunchAssociatedProgram(string filename) {
         Process.Start( @"cmd.exe", "/C start "+ filename );
     }
    

    编辑:

    我不知道它是否适用于参数,但它是我正在寻找的启动关联程序...

    【讨论】:

      【解决方案2】:

      你的“论点”到底是什么,它有空格、反斜杠等吗?

          Process process = new Process();
          process.StartInfo.FileName = @"C:\process.exe";
          process.StartInfo.Arguments = @"-r -d something else";
          process.StartInfo.CreateNoWindow = false;
          process.StartInfo.UseShellExecute = false;
          process.Start();
      

      您是否有任何原因无法启动应用程序,然后在您的参数中使用扩展名和参数?

      【讨论】:

      • 您好,我的参数没有空格,但我的 FileName 不是您的示例代码中的可执行文件。我正在尝试通过扩展关联打开一个应用程序。
      • 我必须启动一个编辑器,传递要编辑的文件和一个用于进入特殊模式的参数。这个想法是文件扩展名始终是已知的,但可执行位置不是。
      【解决方案3】:

      我相信这是意料之中的。在幕后,Windows 在注册表中查找默认应用程序并创建一个新进程并将您的文件名传递给它。如果我转到命令提示符并键入 "filename.ext argument",我会得到相同的行为,即我的参数不会传递给应用程序。

      您可能需要做的是通过查看注册表自己找到默认应用程序。然后,您可以使用参数开始该过程,而不是尝试通过文件类型关联开始。这里有一个关于如何在注册表中找到默认应用的答案:

      Finding the default application for opening a particular file type on Windows

      【讨论】:

      • 您好烦,谢谢您的回答!很遗憾,我不得不从这 4 行切换到查询注册表项...
      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2017-05-27
      • 2016-08-17
      • 1970-01-01
      • 2012-12-23
      • 1970-01-01
      • 2011-09-07
      • 2014-10-29
      相关资源
      最近更新 更多