2012-01-07 50 views
0

我正在爲第三方不可觸摸的控制檯可執行文件創建GUI。該可執行文件讀取輸入文件,處理數據並生成輸出文件。由於該過程可能需要很長時間,所以我需要監視進度。另一個進程文件句柄上的SetFilePointer()失敗

我想要做的是找到控制檯可執行進程ID(完成),進程ID檢索進程打開的文件列表(完成),然後,一旦輸入文件被識別,它的處理是retreived(完成),我想調用SetFilePointer(handle,0,currentPosition),以便告訴我已經讀取了多少文件。然後,(read/totalSize)會給我這個過程的進展。

問題是調用SetFilePointer()總是返回0xFFFFFFFF(失敗)並且GetLastError()返回6(無效句柄)。有任何想法嗎?

預先感謝您。

回答

5

手柄屬於擁有過程,只能由擁有過程操作。如果您想修改另一個進程中的句柄,則需要將代碼注入該進程,或使用DuplicateHandle

+2

是否可以使用DuplicateHandle()作爲解決方法?我的意思是,一旦我有原始文件句柄,我複製它,並調用SetFilePointer()在重複的一個。 – 2012-01-07 10:11:48

+2

是的,我認爲這將起作用。對不起,我最初忘了這件事。我認爲如果兩個進程同時訪問文件指針,你可能會遇到線程安全問題。我知道你的修改是良性的,但是我想知道如果你想在目標應用修改文件的同時讀取文件指針,會發生什麼。 – 2012-01-07 10:18:55

+0

它似乎工作!是的,我也想知道如果(當)兩個進程一次訪問文件指針時會發生什麼。我想我必須進行深入的測試,看看會發生什麼,但那是......另一個故事。謝謝...給我英國朋友喝啤酒... – 2012-01-07 10:55:08

相關問題