您能否将资源发送到 .NET 5 中独立的单文件应用程序中的进程?

Can you send resources to a process in a self-contained, single file application in .NET 5?

我试图在我的 WPF 应用程序中包含一个 .CHM(Microsoft 编译的 HTML 帮助)文档文件。它在我的应用程序中被设置为资源。

我使用 .NET 5,我想使用单文件部署创建一个独立的应用程序。当我的本地计算机上有 .CHM 文件时,我可以执行该文件以在 Windows.

中打开默认帮助查看器
var p = new Process();
p.StartInfo = new ProcessStartInfo(@"D:\helpfile.chm")
{
    UseShellExecute = true
};
p.Start();

我想对项目中包含的资源执行类似的操作。但是,在单个文件部署中,没有文件路径之类的东西(请参阅 https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file)。由于我想“跳出”应用程序并将文件发送到进程,我可以将整个文件发送到我的应用程序之外的进程吗?

一种解决方法可能是创建一个安装程序并将帮助文件安装在用户的计算机上,但这种做法破坏了单一文件部署的全部意义。

  1. 使用 Application.GetResourceStream() 以二进制流的形式获取嵌入式 CHM 的内容。
  2. 使用System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".chm"获取临时文件名,并将该文件作为二进制流打开。
  3. 将(1)的内容写入(2),关闭(2)。
  4. 使用 (2) 中的临时文件名构建并启动您的进程。
  5. 可选择地,在您的应用程序退出时删除 (2)。