我正在开发一个可以对我们的主程序的模块进行实时更新的程序。
如果主 exe 正在运行,则需要
1)将其重命名为临时名称,例如:%productpath%\main.exe -> %productpath%\temp\temp.exe
::MoveFileEx(%productpath%\main.exe, %productpath%\temp\temp.exe, MOVEFILE_REPLACE_EXISTING)
---GetLastError()
返回ERROR_SHARING_VIOLATION
2)删除临时文件,直到重新启动
::MoveFileEx(%productpath%\temp\temp.exe, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
3)将新下载的exe复制到原始路径%productpath%\main.exe
我的问题是为什么它在第一步失败,因为exe正在运行而MoveFileEx()
返回?ERROR_SHARING_VIOLATION
我的更新程序具有管理员权限。