gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:58 25 4
gpt4 key购买 nike

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

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

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

最佳答案

这在仅托管方式中是不可能的。

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

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

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

The duplicate handle refers to the same object as the original handle. Therefore, any changes to the object are reflected through both handles. For example, if you duplicate a file handle, the current file position is always the same for both handles. For file handles to have different file positions, use the CreateFile function to create file handles that share access to the same file.

关于c# - 在 .NET 中的两个进程之间传递流对象/文件句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25351399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com