C#代码不会启动程序。 Win32Exception未处理

我正在创建一个程序,在单击按钮时启动程序。 它似乎适用于Chrome或Word等程序,但不适用于较小的程序,如fraps,并且会给我错误

System.dll中发生未处理的“System.ComponentModel.Win32Exception”类型的exception附加信息:系统找不到指定的文件

private void Fraps_Click(object sender, EventArgs e) { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "fraps.exe"; Process.Start(startInfo); } 

从MSDN引用:

在启动进程之前,必须至少设置FileName属性。 文件名是任何应用程序或文档。 文档被定义为具有与之关联的打开或默认操作的任何文件类型。 您可以使用“操作系统”中提供的“文件夹选项”对话框查看计算机的已注册文件类型及其关联的应用程序。 “高级”按钮将显示一个对话框,显示是否存在与特定注册文件类型关联的打开操作。

在您的情况下,fraps.exe不是注册文件类型关联的应用程序。 所以给fraps.exe提供FULL PATH

代码示例如下所示(在hdd上查找fraps安装并在第二行中替换fraps.exe的路径)

 ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = @"C:\Program Files\fraps\fraps.exe"; // Your absolute PATH Process.Start(startInfo); 

Windows不知道“fraps.exe”是什么,并且它在被告知要搜索的文件夹中找不到这样的可执行文件。

我们来validation一下。 打开命令提示符并键入“fraps.exe”。 当前目录的位置无关紧要; 主文件夹应该做得很好。

在此处输入图像描述

只要您没有将fraps安装到您的主文件夹,这就是您应该看到的。 现在,为什么这对“chrome.exe”(可能不是我的系统中的情况)而不是fraps?

在幕后,当您键入命令时,Windows会被告知要查看多个文件夹。 如果在提示符中键入SET则可以看到完整列表,并搜索PATH

在此处输入图像描述

这有点乱,但是查看当前目录 ,Windows将会找到您想要的程序。

在这种情况下,Windows无法在当前目录(您的bin\Debug文件夹)或PATH中的任何文件夹中找到“fraps.exe”。 所以它举起手来说The system cannot find the file specified

您有两种方法可以解决此问题:

一: 使用完整路径名。 如果您知道安装了fraps的位置,则可以使用可执行文件的完整路径名,例如:

 startInfo.FileName = @"c:\Program Files\Fraps\fraps.exe"; 

二: 将fraps安装文件夹添加到PATH环境变量中 。 这更加棘手和复杂,但您或多或少地将已安装的fraps路径附加到PATH变量中。 你可以这样做,或者依靠最终用户来做到这一点(尽管这对我来说听起来不是一个好主意)。

这两个选项都要求您知道安装了fraps的位置,因此最好对值进行硬编码(如果此程序仅适用于您自己)或在启动/安装程序时询问用户安装路径。

恕我直言,你可以调用在环境中有路径条目的任何程序。 在这里,我们不确定exe是否存在于正在执行的应用程序的bin目录中。 你可以尝试完整的路径,你不会有例外

我建议您可以将exe作为应用程序的一部分来引导,因为它不是Windows的一部分,或者您可以提示用户确保路径在环境变量中。

如果你要调用的exe是32位,那么你的代码也必须是32位。 AnyCpu或64bit给出了该错误。