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

时间:2014-12-22 03:28:48

标签: c# process

我制作了一个程序,可以在单击按钮时启动程序。它似乎适用于Chrome或Word等程序,但不适用于较小的程序,例如fraps,并且给我错误

  

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

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

5 个答案:

答案 0 :(得分:4)

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

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

enter image description here

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

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

enter image description here

这有点混乱,但是在查找当前目录之后,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的位置,因此最好对该值进行硬编码(如果此程序仅适用于您自己)或在启动时询问用户安装路径/安装程序。

答案 1 :(得分:2)

引自MSDN

  

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

在您的情况下,fraps.exe不是已注册的文件类型关联应用程序。因此,给fraps.exe提供完整路径

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

Process.Start()中遇到了相同的问题。我有一个EXE谁的解决方案平台针对“任何CPU”。
我的应用安装在运行EXCEL(也是64位)的64位CPU上。

解决方案是针对x64构建。 (A.Kadir Bener对此不了解)

要更改Solution Platform 右键单击Solution Explorer中的解决方案...向下滚动到Configuration Manager...
Active solution platform:下,选择 x64 (如果有)
如果不选择x64,则选择新建...
Type or select the new platform下...选择 x64