2011-02-16 63 views
1


我试图推出延期指定一个额外的参数注册的默认应用程序:C#打开文件相关联的应用程序传递参数

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

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

在此先感谢您的帮助,
保罗

回答

1

我相信这是预期的。在幕后,Windows正在注册表中找到默认应用程序,并创建一个新进程并将文件名传递给它。如果我转到命令提示符并键入“filename.ext参数”,我得到相同的行为,即我的参数未传递给应用程序。

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

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

0

究竟是你的“说法”,它有空格,反斜线等?

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(); 

是否有任何理由不能启动应用程序,然后在参数中使用扩展名和参数?

+0

嗨,我的参数没有空格,但我的FileName是像你的示例代码中的可执行文件。我正尝试通过扩展关联来打开一个应用程序。 – Paull 2011-02-16 14:10:32

+0

没错,但是有没有需要这样做? – Ryan 2011-02-16 14:11:42

+0

我必须启动一个编辑器来传递文件进行编辑并输入特殊模式的参数。这个想法是,文件扩展名总是已知的,但可执行位置不是。 – Paull 2011-02-16 14:27:23

-1

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

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

编辑:

我不不知道它是否与论据一起工作,但它是我正在寻找启动相关程序...

相关问题