C# 另一个';进程文件句柄失败

C# 另一个';进程文件句柄失败,c#,windows,winapi,64-bit,C#,Windows,Winapi,64 Bit,我正在为第三方不可接触的控制台可执行文件制作GUI。此可执行文件读取输入文件,处理数据并生成输出文件。由于这个过程可能需要很长时间,我需要监控进度 我要做的是找到控制台可执行进程id(完成),用进程id检索进程打开的文件列表(完成),然后,一旦识别输入文件并检索其句柄(完成),我要调用SetFilePointer(句柄,0,currentPosition)所以它告诉我已经读取了多少文件。然后,(read/totalSize)将告诉我该过程的进度 问题是调用SetFilePointer()总是返回

我正在为第三方不可接触的控制台可执行文件制作GUI。此可执行文件读取输入文件,处理数据并生成输出文件。由于这个过程可能需要很长时间,我需要监控进度

我要做的是找到控制台可执行进程id(完成),用进程id检索进程打开的文件列表(完成),然后,一旦识别输入文件并检索其句柄(完成),我要调用SetFilePointer(句柄,0,currentPosition)所以它告诉我已经读取了多少文件。然后,(read/totalSize)将告诉我该过程的进度

问题是调用SetFilePointer()总是返回0xFFFFFFFF(失败),而GetLastError()则返回6(无效句柄)。有什么想法吗


提前感谢。

句柄属于所属进程,只能由所属进程操作。如果要修改另一个进程中的句柄,则需要将代码注入该进程,或者使用
DuplicateHandle

句柄属于所属进程,只能由所属进程操作。如果要修改另一个进程中的句柄,需要将代码注入该进程,或者使用
DuplicateHandle

是否可以使用DuplicateHandle()作为解决方法?我的意思是,一旦我有了原始的文件句柄,我就复制它,并在复制的句柄上调用SetFilePointer()。是的,我认为这会起作用。对不起,我原来忘了。我认为如果两个进程同时访问文件指针,您可能会遇到线程安全问题。我知道你的修改是良性的,但我想知道如果你在目标应用程序修改文件的同时读取文件指针,会发生什么情况。它似乎有效!!!是的,我还想知道如果两个进程同时访问文件指针会发生什么。我想我必须进行密集测试,看看会发生什么,但那是。。。另一个故事。非常感谢。给我的英国朋友一杯啤酒……是否可以使用DuplicateHandle()作为解决方法?我的意思是,一旦我有了原始的文件句柄,我就复制它,并在复制的句柄上调用SetFilePointer()。是的,我认为这会起作用。对不起,我原来忘了。我认为如果两个进程同时访问文件指针,您可能会遇到线程安全问题。我知道你的修改是良性的,但我想知道如果你在目标应用程序修改文件的同时读取文件指针,会发生什么情况。它似乎有效!!!是的,我还想知道如果两个进程同时访问文件指针会发生什么。我想我必须进行密集测试,看看会发生什么,但那是。。。另一个故事。非常感谢。给我的英国朋友一杯啤酒。。。