在.NET中的两个进程之间传递流对象/文件句柄

时间:2014-08-17 16:49:56

标签: c# .net filestream file-locking inter-process-communicat

我在同一台机器上运行Windows服务和桌面应用程序。该应用程序预处理一些文档并将它们传输到服务可以接管的文件夹。当应用程序为服务创建新文件时,它会在写入时对文件保持只读锁定。它们释放它,以便服务可以获取新的只读锁(FileStream)。

我希望应用程序以某种方式将此锁定移交给服务而不关闭它。这在托管运行时是否可行?如果没有,有没有办法P / Invoke这种行为?

需要此行为的原因是,在应用程序和服务都完成之前,其他任何进程都无法修改或删除该文件。

1 个答案:

答案 0 :(得分:2)

这是以托管方式实现的。

尝试使用更简单的方法,例如在临时目录中使用随机名称命名文件,以便其他应用程序不会尝试打开它。

如果您坚持传递句柄,则必须将句柄复制到服务进程中,并将该进程的数字句柄值传递给服务进程。请使用OpenProcessDuplicateHandleCloseProcess

来自http://msdn.microsoft.com/en-us/library/windows/desktop/ms724251(v=vs.85).aspx

  

重复句柄指的是与原始句柄相同的对象。   因此,对象的任何更改都会通过两者进行反映   处理。例如,如果复制文件句柄,则为当前文件   两个手柄的位置始终相同。对于文件句柄   不同的文件位置,使用CreateFile函数创建文件   处理共享对同一文件的访问权限。