我在同一台机器上运行Windows服务和桌面应用程序。该应用程序预处理一些文档并将它们传输到服务可以接管的文件夹。当应用程序为服务创建新文件时,它会在写入时对文件保持只读锁定。它们释放它,以便服务可以获取新的只读锁(FileStream)。
我希望应用程序以某种方式将此锁定移交给服务而不关闭它。这在托管运行时是否可行?如果没有,有没有办法P / Invoke这种行为?
需要此行为的原因是,在应用程序和服务都完成之前,其他任何进程都无法修改或删除该文件。
答案 0 :(得分:2)
这是以托管方式实现的。
尝试使用更简单的方法,例如在临时目录中使用随机名称命名文件,以便其他应用程序不会尝试打开它。
如果您坚持传递句柄,则必须将句柄复制到服务进程中,并将该进程的数字句柄值传递给服务进程。请使用OpenProcess
,DuplicateHandle
和CloseProcess
。
来自http://msdn.microsoft.com/en-us/library/windows/desktop/ms724251(v=vs.85).aspx:
重复句柄指的是与原始句柄相同的对象。 因此,对象的任何更改都会通过两者进行反映 处理。例如,如果复制文件句柄,则为当前文件 两个手柄的位置始终相同。对于文件句柄 不同的文件位置,使用CreateFile函数创建文件 处理共享对同一文件的访问权限。