进程.在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");
}
您的应用程序很可能是32位的,在64位Windows中,对C:'Windows'System32
的引用会透明地重定向到32位应用程序的C:'Windows'SysWOW64
。calc.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"
,这是一个很容易犯的错误,我就是这么做的。我希望在这里记录下我的不幸将有助于未来的开发人员。