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 の作業ディレクトリを設定できますSetOutPath

于 2013-11-06T02:22:42.670 に答える
0

NSIS は現在の作業ディレクトリをそのフォルダーに設定していないため、実行可能ファイルが失敗します。

1 つのオプションは、コマンド ラインでフル パスを渡すことです。

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

これにより、プログラムをコマンドライン引数から読み取らせ、現在のディレクトリにハードコーディングする代わりにファイル (フルパス付き) を使用することができます。

于 2013-11-05T19:42:40.077 に答える