c# - 如何使用默认浏览器打开 HTML 文件并在用户查看后将其删除?

标签 c# html .net temporary-files default-browser

我尝试使用默认浏览器打开临时 HTML 文件,然后删除该文件:

        var tempFileName = Path.ChangeExtension(Path.GetTempFileName(), "html");
        // I save document to temp file here...

        Process process = null;
        try
        {
            process = Process.Start(tempFileName);
        }
        catch (Win32Exception)
        {
        }
        catch (ObjectDisposedException)
        {
        }
        catch (FileNotFoundException)
        {   
        }

        var worker = new BackgroundWorker();
        worker.DoWork += (s, we) => {
            if (process != null)
            {
                process.WaitForExit();
                try
                {
                    File.Delete(tempFileName);
                }
                catch (IOException)
                {
                }
            }
        };
        worker.RunWorkerAsync();

不幸的是,Process.Start 如果进程未启动但使用了正在运行的进程(在 Google Chrome 中打开新选项卡),则返回 null。所以我等不及该进程退出了。

那么,一个普遍的问题是:如何完成任务?如何向用户显示临时 HTML 文件并在查看后将其删除?

最佳答案

如果您使用 ProcessStartInfo 并设置 UseShellExecute然后您可以像您现在尝试的那样直接“运行”HTML 来启动用户的默认浏览器。我还没有尝试过,但它应该会返回一个 Process 以确定用户何时关闭了浏览器。

我仍然会为一些您无法控制的边缘情况做准备。例如,如果他们让浏览器保持打开状态但关闭正在监视浏览器的应用程序。到那时你会让浏览器保持活力吗?你杀了它吗?什么时候删除 HTML 文件?使用 Web Browser 可能会更好控制。那么您甚至不必担心其他进程或浏览器兼容性。您甚至可以将 HTML 内容流式传输到控件,并且以后没有要删除的文件。

关于c# - 如何使用默认浏览器打开 HTML 文件并在用户查看后将其删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30869497/

相关文章:

javascript - 从事件监听器更改时 RGB 颜色不更新

c# - 如何在RDLC中设置参数值

c# - CS0672 : Member `Foo.OnSelected()' overrides obsolete member `Baz.OnSelected()'

c# - Automapper:数组到对象的映射

JavaScript localStorage - 来自多个用户卡的文本输入

c# - 从 OutOfMemoryException 中恢复

c# - WCF 应用程序中的 session 变量

c# - 在 WinForm 中声明一个全局整数

c# - 内存不足异常 - 使用 SqlDataReader 和 OpenXML

javascript - 使用 javascript 从 txt 文件中读取数据,每 5 分钟一次