2

我编写了一个简单的固件更新实用程序,需要作为安装程序的一部分运行。安装程序将主应用程序以及二进制固件文件和固件更新安装程序都安装到安装目录中。在更新实用程序中,我在尝试将文件上传到我的设备之前检查文件是否存在。

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检查以查看文件是否仍会打开,但事实并非如此。

4

2 回答 2

0

NSIS 没有将当前的工作目录设置为该文件夹,这会导致您的可执行文件失败。

一种选择是在命令行中传递完整路径:

ExecWait '"$INSTDIR\YourProgram.exe" "$INSTDIR\My_Firmware.bin"'

这将允许您从命令行参数中读取程序,并使用文件(带有完整路径)而不是将其硬编码到当前目录。

于 2013-11-05T19:42:40.077 回答
0

您可以在 NSIS 中使用SetOutPath.

于 2013-11-06T02:22:42.670 回答