我编写了一个简单的固件更新实用程序,需要作为安装程序的一部分运行。安装程序将主应用程序以及二进制固件文件和固件更新安装程序全部安装到安装目录中。在更新实用程序中,我在尝试将文件上传到设备之前检查文件是否存在。
if (!System.IO.File.Exists("My_Firmware.bin"))
//handle error
返回false并且我的实用程序失败,但仅在直接从NSIS安装程序调用时失败。如果我通过双击可执行文件直接从安装目录运行该实用程序,它可以正常工作。我正在使用ExecWait
来运行该实用程序。
ExecWait '"$INSTDIR\UpdateUI.exe"'
IfErrors 0 noError
messageBox MB_OK "No firmware was installed!"
我尝试以管理员身份运行安装程序。我也尝试将安装目录更改为不太可能出现权限问题的地方。我尝试使用Exec
同样的结果。我还尝试删除File.Exists
检查,看看文件是否会打开,但它没有。
答案 0 :(得分:0)
NSIS没有将当前的工作目录设置为该文件夹,这导致您的可执行文件失败。
一种选择是在命令行传递完整路径:
ExecWait '"$INSTDIR\YourProgram.exe" "$INSTDIR\My_Firmware.bin"'
这将允许您从命令行参数中读取程序,并使用该文件(使用完整路径)而不是将其硬编码到当前目录。
答案 1 :(得分:0)
您可以使用SetOutPath
在NSIS中设置工作目录。