我正在尝试使用简单的Process.Start()清理我启动的临时文件。我不知道文件的类型是什么,所以我使用ShellExec = true启动它:
var lProcess = new Process();
lProcess.StartInfo.FileName = lTempFileName;
lProcess.EnableRaisingEvents = true;
lProcess.Start();
TempFileCleaner.RegisterCleanup(lProcess, lTempFileName);
但是,该过程解析为“C:\ Windows \ SysWOW64 \ rundll32.exe”(实际上是“打开方式”对话框)。在打开对话框中选择应用程序后,该过程将退出。
有没有办法查看rudll32在存在之前启动哪个进程?
如果无法做到这一点,我将不得不手动读取文件关联并自行启动正确的过程,但如果找不到任何关联,我将不得不显示错误。
我也写了这个课来帮助清理:
private static class TempFileCleaner
{
static Dictionary<Process, string> _PendingCleanups = new Dictionary<Process, string>();
public static void RegisterCleanup(Process pProcess, string pFileName)
{
_PendingCleanups.Add(pProcess, pFileName);
pProcess.Exited += pProcess_Exited;
}
static void pProcess_Exited(object sender, EventArgs e)
{
var lProcess = (Process)sender;
lProcess.Exited -= pProcess_Exited;
try
{
File.Delete(_PendingCleanups[lProcess]);
}
finally
{
_PendingCleanups.Remove(lProcess);
lProcess.Dispose();
}
}
}