如何在shellexec之后获得由“open with”产生的进程

时间:2012-03-07 13:38:40

标签: .net shellexecute

我正在尝试使用简单的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();
            }
        }
    }

0 个答案:

没有答案