【发布时间】:2010-01-18 18:47:31
【问题描述】:
我们有一个需要更新的客户端服务器软件。我需要检查文件当前是否正在被访问。如果可能的话,这可能吗?我可以看到文件是否打开的唯一地方是共享文件夹下的打开文件。我试过这段代码,但只是显示文件没有打开。
function TfrmMain.FileInUse(FileName: string): Boolean;
var H_File : HFILE;
begin
Result := False;
if not FileExists(FileName) then
begin
showmessage ('Doesnt Exist');
exit;
end;
H_File := CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE, 0,
nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
Result := (H_File = INVALID_HANDLE_VALUE);
showmessage('Opened');
if not Result then
CloseHandle(H_File);
end;
【问题讨论】:
-
你提到“文件”是什么意思?
-
一个需要更新的exe文件,所以在删除替换文件之前需要确保没有打开过。
-
@Jason:毕竟,也许你不必这样做。即使可执行文件正在使用中,您也可以替换它,请参阅stackoverflow.com/questions/277514/…
-
我想检查 exe 是否正在运行,如果是,我将杀死它然后替换 exe。连同运行脚本和其他一些东西。它需要确保每个人都退出该计划。但是那个链接非常有帮助,谢谢。