进程.在C#中启动系统找不到指定的文件错误

本文关键字:文件 错误 找不到 系统 启动 进程 | 更新日期: 2023-09-27 17:59:30

这是我面临的一个愚蠢而棘手的问题。

以下代码运行良好(它启动计算器):

ProcessStartInfo psStartInfo = new ProcessStartInfo();
psStartInfo.FileName = @"c:'windows'system32'calc.exe";
Process ps = Process.Start(psStartInfo);

但是下面的SoundRecorder不起作用。它给了我"系统找不到指定的文件"的错误。

ProcessStartInfo psStartInfo = new ProcessStartInfo();
psStartInfo.FileName = @"c:'windows'system32'soundrecorder.exe";
Process ps = Process.Start(psStartInfo);

我可以使用开始->运行->"c:''windows''system32''soundrecorder.exe"命令启动录音机。

知道出了什么问题吗?

我在Visual Studio 2015中使用C#,并使用Windows 7操作系统。

UPDATE 1:我尝试了File.Exists检查,它显示了以下代码中的MessageBox:

if (File.Exists(@"c:'windows'system32'soundrecorder.exe"))
{
    ProcessStartInfo psStartInfo = new ProcessStartInfo();
    psStartInfo.FileName = @"c:'windows'system32'soundrecorder.exe";
    Process ps = Process.Start(psStartInfo);
}
else
{
    MessageBox.Show("File not found");
}

进程.在C#中启动系统找不到指定的文件错误

您的应用程序很可能是32位的,在64位Windows中,对C:'Windows'System32的引用会透明地重定向到32位应用程序的C:'Windows'SysWOW64calc.exe恰好同时存在于两个位置,而soundrecorder.exe仅存在于真正的System32中。

Start / Run启动时,父进程是64位explorer.exe,因此不会执行重定向,而是找到并启动64位C:'Windows'System32'soundrecorder.exe

来自文件系统重定向器:

在大多数情况下,每当32位应用程序尝试访问%windir%''System32时,访问都会重定向到%windir%%''SysWOW64。


[EDIT]来自同一页面:

32位应用程序可以通过将%windir%''Sysnative替换为%windir''''System32来访问本机系统目录。

因此,从(真实的)C:'Windows'System32启动soundrecorder.exe将起到以下作用。

psStartInfo.FileName = @"C:'Windows'Sysnative'soundrecorder.exe";

旧线程,但提供了另一种可能的情况

在我的情况下,我在Process.启动中使用参数

System.Diagnostics.Process.Start("C:''MyAppFolder''MyApp.exe -silent");

我把它改成

ProcessStartInfo info = new ProcessStartInfo("C:''MyAppFolder''MyApp.exe");
info.Arguments = "-silent";
Process.Start(info)

然后它起作用了。

还有一个案例,类似于Ranadheer Reddy的答案,但不同之处足以让我绊倒一段时间。

我犯了一个简单的错误。我有这个:

ProcessStartInfo info = new ProcessStartInfo("C:''MyAppFolder''MyApp.exe ");
info.Arguments = "-silent";
Process.Start(info);

看到应用程序路径末尾的空格了吗?是 啊它不喜欢那样。如果你把它包括在内,它将找不到你的文件。

解决办法是去掉多余的空间。然后它起作用了。

如果你将一个应用程序从启动"cmd.exe /c MyApp.exe -silent"的进程转换为直接运行"MyApp.exe",这是一个很容易犯的错误,我就是这么做的。我希望在这里记录下我的不幸将有助于未来的开发人员。