如何在C#中启动文件

– 编辑 – 我觉得自己像个白痴。 我有一种感觉,下面的答案会起作用,但没有看到任何类似于以下答案的谷歌搜索结果。 所以当我看到这个复杂的代码时,我认为它必须是这样的。

我搜索并发现这个Windows:List和Launch应用程序与扩展程序相关但是它没有回答我的问题。 通过下面的调整,我提出了以下内容。 但它会卡在图像文件上。 Txt文件运行正常

我将尽快更新此代码以考虑带有空格的应用程序路径,但我不明白为什么图像文件不启动。

static void launchFile(string fn) { //majority was taken from //https://stackoverflow.com/questions/24954/windows-list-and-launch-applications-associated-with-an-extension const string extPathTemplate = @"HKEY_CLASSES_ROOT\{0}"; const string cmdPathTemplate = @"HKEY_CLASSES_ROOT\{0}\shell\open\command"; string ext = Path.GetExtension(fn); var extPath = string.Format(extPathTemplate, ext); var docName = Registry.GetValue(extPath, string.Empty, string.Empty) as string; if (!string.IsNullOrEmpty(docName)) { // 2. Find out which command is associated with our extension var associatedCmdPath = string.Format(cmdPathTemplate, docName); var associatedCmd = Registry.GetValue(associatedCmdPath, string.Empty, string.Empty) as string; if (!string.IsNullOrEmpty(associatedCmd)) { //Console.WriteLine("\"{0}\" command is associated with {1} extension", associatedCmd, ext); var p = new Process(); p.StartInfo.FileName = associatedCmd.Split(' ')[0]; string s2 = associatedCmd.Substring(p.StartInfo.FileName.Length + 1); s2 = s2.Replace("%1", string.Format("\"{0}\"", fn)); p.StartInfo.Arguments = s2;//string.Format("\"{0}\"", fn); p.Start(); } } } 

使用:

 System.Diagnostics.Process.Start(filePath); 

它将使用将打开的默认程序,就像您单击它一样。 不可否认,它不允许您选择将运行的程序…但假设您想模仿用户双击该文件时将使用的行为,这应该可以正常工作。

这听起来好像你正在寻找更多:

 System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.EnableRaisingEvents = false; proc.StartInfo.FileName = ""; proc.Start(); 

假设您只想启动已经有一些关联应用程序的文件(例如:* .txt与记事本相关联),请使用System.Diagnostics.Process。

例如:

  using System.Diagnostics; Process p = new Process(); ProcessStartInfo pi = new ProcessStartInfo(); pi.UseShellExecute = true; pi.FileName = @"MY_FILE_WITH_FULL_PATH.jpg"; p.StartInfo = pi; try { p.Start(); } catch (Exception Ex) { //MessageBox.Show(Ex.Message); } 

注意:在我的PC中,pic在Windows图片和传真查看器中打开,因为这是* .jpg文件的默认应用程序。