如何在C#中测试exe是否正确运行
本文关键字:是否 运行 exe 测试 | 更新日期: 2023-09-27 17:58:28
我有一个viewer.exe
,它在启动时从"models"文件夹加载一些模型(*.mdl
)。某些模型崩溃viewer.exe
:"viewer.exe已停止工作。Windows可以联机检查问题的解决方案"
我可以做的是将所有.mdl
文件移动到"源"文件夹中,然后手动测试移动到"模型"中的每个.mdl
文件(如果viewer.exe
正在运行),但有很多文件需要检查。如何将每个*.mdl
文件从"源"移动到"模型",并以编程方式测试viewer.exe
是否正确运行?
以下是我用于解决第一个问题的代码:从"模型"中的"源"文件夹子目录中移动.mdl files
。有些文件的名称相同,但大小不同:
String mask = "*.mdl";
String source = @"c:'Source'";
String destination = @"c:'Models'";
String[] files = Directory.GetFiles(source, mask, SearchOption.AllDirectories);
foreach (String file in files)
{
if (File.Exists(file) && !File.Exists(destination + new FileInfo(file).Name))
{
File.Move(file, destination + new FileInfo(file).Name);
}
else
{
FileInfo f = new FileInfo(file);
long s = f.Length;
FileInfo f2 = new FileInfo(destination + new FileInfo(file).Name);
long s2 = f2.Length;
if (s >= s2)
{
File.Delete(destination + new FileInfo(file).Name);
File.Move(file, destination + new FileInfo(file).Name);
}
}
}
使用process.start(startInfo)(请参阅http://msdn.microsoft.com/en-gb/library/0w4h05yb.aspx)
等待几秒钟,检查进程是否已终止,然后返回进程。hasexited(http://msdn.microsoft.com/en-us/library/system.diagnostics.process.hasexited.aspx)
然后使用process.kill()杀死它(请参阅http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill.aspx)
您可能需要关闭窗口错误报告:http://msdn.microsoft.com/en-us/library/bb513638(VS.85).aspx
环绕try-catch语句中可能失败的操作
try {
File.Delete(destination + new FileInfo(file).Name);
} catch (Exception ex) {
// File could not be deleted
}
try {
File.Move(file, destination + new FileInfo(file).Name);
} catch (Exception ex) {
// File could not be moved
}
在catch语句中,如果无法处理文件,请执行您想做的任何操作。
我已经禁用了windows错误报告,这就是程序现在的样子:
String mask = "*.mdl";
String source = @"c:'source'";
String destination = @"C:'Viewer'Models'";
String[] files = Directory.GetFiles(source, mask, SearchOption.AllDirectories);
foreach (String file in files)
{
if (File.Exists(file) && !File.Exists(destination + new FileInfo(file).Name))
{
File.Move(file, destination + new FileInfo(file).Name);
}
else
{
FileInfo f = new FileInfo(file);
long s = f.Length;
FileInfo f2 = new FileInfo(destination + new FileInfo(file).Name);
long s2 = f2.Length;
if (s >= s2)
{
File.Delete(destination + new FileInfo(file).Name);
File.Move(file, destination + new FileInfo(file).Name);
}
}
//mycompiledapp.exe is placed in Viewer folder for this to work
Process myprocess = Process.Start(@"viewer.exe");
Thread.Sleep(3000);
if (myprocess.HasExited) //Process crashes, exiting automatically
{
//Deletes the file that makes the viewer.exe crash
File.Delete(destination + new FileInfo(file).Name);
}
else
{
myprocess.Kill();
}
}